#include <qobject
时间: 2024-09-23 15:11:50 浏览: 46
这是一个支持通过信号槽机制,向QList、QVector、QMap等容器对象中添加自定义的数据,并支持遍历这些对象中所有元素并且全部使用qDebug打印出来的Qt类的实现:
```
#include <QObject>
#include <QDebug>
#include <QList>
#include <QVector>
#include <QMap>
class Container : public QObject
{
Q_OBJECT
public:
explicit Container(QObject *parent = nullptr) : QObject(parent) {}
signals:
void addToList(QString data);
void addToVector(QString data);
void addToMap(QString key, QString value);
void printAll();
public slots:
void onAddToList(QString data)
{
m_list.append(data);
if (m_list.count() == 5) {
emit printAll();
}
}
void onAddToVector(QString data)
{
m_vector.append(data);
if (m_vector.count() == 5) {
emit printAll();
}
}
void onAddToMap(QString key, QString value)
{
m_map.insert(key, value);
if (m_map.count() == 5) {
emit printAll();
}
}
void onPrintAll()
{
qDebug() << "List:";
for (const auto &data : m_list) {
qDebug() << data;
}
qDebug() << "Vector:";
for (const auto &data : m_vector) {
qDebug() << data;
}
qDebug() << "Map:";
for (const auto &key : m_map.keys()) {
qDebug() << key << ":" << m_map.value(key);
}
qApp->quit();
}
private:
QList<QString> m_list;
QVector<QString> m_vector;
QMap<QString, QString> m_map;
};
```
这个类有四个信号槽,分别是addToList、addToVector、addToMap和printAll。addToList、addToVector和addToMap分别用于向QList、QVector和QMap中添加数据,printAll用于遍历这些容器对象并且全部使用qDebug打印出来。
在每个添加数据的槽函数中,我们都会检查容器对象中元素的数量是否达到了5个,如果是,就会发出printAll信号。
在printAll槽函数中,我们会遍历QList、QVector和QMap中的所有元素,并且全部使用qDebug打印出来。最后,我们调用qApp->quit()退出程序。
使用这个类的方法如下:
```
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Container container;
QObject::connect(&container, &Container::addToList, &container, &Container::onAddToList);
QObject::connect(&container, &Container::addToVector, &container, &Container::onAddToVector);
QObject::connect(&container, &Container::addToMap, &container, &Container::onAddToMap);
QObject::connect(&container, &Container::printAll, &container, &Container::onPrintAll);
for (int i = 0; i < 5; ++i) {
container.addToList(QString("List %1").arg(i));
container.addToVector(QString("Vector %1").arg(i));
container.addToMap(QString("Key %1").arg(i), QString("Value %1").arg(i));
}
return a.exec();
}
```
在这个例子中,我们创建了一个Container对象,并且连接了它的四个信号槽。然后,我们向QList、QVector和QMap中添加了5个数据。由于我们在添加数据时都会检查容器对象中元素的数量是否达到了5个,所以当所有数据都添加完毕后,printAll信号就会被发出,然后我们就会遍历QList、QVector和QMap中的所有元素,并且全部使用qDebug打印出来。最后,我们调用qApp->quit()退出程序。
阅读全文