QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().).
上述错误,只有在跨线程信号传递时才会出现. 因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题.
源码:
// 线程类 thread.h class Thread:public QThread { Q_OBJECT public: Thread(){} ~Thread(){} protected: virtual void run(); signals: void sendMsg(const QMap<QString,QString> &msgs); }
// 信号接收类 test.h Test(Thread *th):m_th(th) { // 不同线程用队列方式连接 connect(m_th,SIGNAL(sendMsg(const QMap<QString,QString> &)),this,SLOT(handle(const QMap<QString,QString> &)),Qt::QueuedConnection); }
解决方案:通过qRegisterMetaType()方法注册至Metype中
// thread.h typedef QMap<QString,QString> StringMap; // typedef操作符为QMap起一别名 void sendMsg(const StringMap &);
// test.h Test(Thread *th):m_th(th) { // 注册QMap至元对象系统 qRegisterMetaType<StringMap>("StringMap"); connect(m_th,SIGNAL(sendMsg(const StringMap &)),this,SLOT(handle(const StringMap &)),Qt::QueuedConnection); }
相关推荐
QObject调用moveToThread(QThread *targetThread)后, 运行targetThread.start(),此后QObject的事件将在targetThread中处理。 比如:QObject的槽函数,将在targetThread中处理。
QObject: Cannot create children for a parent that is in a different thread. QObject::startTimer: Timers cannot be started from another thread 原因:在主线程中创建了QSerialPort对象在子线程中调用,或者...
QObject::connect(sender, &Sender::signal, nullptr, static_cast<void(*)(int)>(processValue)); ``` `processValue`是一个接受整数参数的全局函数。 ### 6. 连接多个槽 `connect`可以将一个信号连接到多个槽,...
qDebug() << "Received message on topic" << msg.topic << ":" << msg.payload; }); ``` 7. **保持连接**:为了保持连接,可以设置定时器定期发送心跳包。MQTT协议允许客户端通过"PINGREQ"报文向服务器发送心跳...
QMap<QString, int> myMap = {"apple", 1}, {"banana", 2}, {"cherry", 3}; for (QMap<QString, int>::iterator it = myMap.begin(); it != myMap.end(); ++it) { qDebug() << it.key() << ":" << it.value(); } ``...
QObject::connect(&worker, SIGNAL(started()), []{ qDebug() << "Worker thread has started"; }); worker.start(); return 0; } ``` **1. 信号** - `void started();` 定义了一个信号`started()`,在`run`...
#include <QString> #include <QTextCodec> enum EncodingFormat { ANSI, UTF16LE, UTF16BE, UTF8, UTF8BOM, }; class Skysonya : public QObject { Q_OBJECT Q_ENUM(EncodingFormat) public: explicit ...
QT5.11.1+MSVC2015_64位下重新编译好的64位Qt 5.11.1的mysql驱动,mysql采用的版本是5.7.22。把qsqlmysql.dl放到QT5的plugins\... qDebug() << "Failed to connect to root mysql admin: " << error.databaseText(); }
QObject::connect(watcher, &QFutureWatcher<int>::finished, [&](){ resultLabel->setText("Finished after " + QString::number(watcher->result()) + " seconds."); }); watcher->setFuture(future); }); ...
- 错误描述:在QThread中将QTcpSocket的信号与槽函数连接时,出现“QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError'”的错误。 - 解决方案:有两种方法,一是将连接方式改为`Qt...
在IT行业中,动态库(DLL,Dynamic Link Library)是一种重要的软件开发技术,广泛应用于Windows操作系统。本示例中,我们有一个名为"testdll.zip"的压缩包,它包含了一个简单的DEMO,目的是为了演示如何处理动态库...
QObject::connect(channel, &QWebChannel::objectRegistered, this, [this, webView](QString objectName) { if (objectName == "myChart") { QWebChannel *webChannel = webView->page()->webChannel(); ...
3. **创建并发送事件**:在需要发送自定义事件的地方,创建一个`SelfEvent`对象,并通过`QCoreApplication::postEvent()`或`QObject::sendEvent()`发送给目标对象。 ```cpp SelfEvent *event = new SelfEvent(); ...
鼠标取色器,取值取色值源码,鼠标全屏幕取点取色。switch (e->type()) { case QEvent::MouseMove: MouseMoveColorPicker((QMouseEvent *)e); break; ... return QObject::eventFilter(obj, e);
QObject::connect(ui->actionForward, &QAction::triggered, webView, &QWebEngineView::forward); QObject::connect(ui->actionReload, &QAction::triggered, webView, &QWebEngineView::reload); QObject::connect...
QObject::connect(view, &QWebEngineView::javascriptConsoleMessage, [](const QString &message, int lineNumber, const QString &sourceId) { qDebug() << "JavaScript console message:" << message << "at ...
QObject::connect(timer, &QTimer::timeout, &shutdownSystem); timer->setInterval(60000); // 设置为1分钟后关机 timer->start(); return app.exec(); } ``` 这段代码创建了一个将在1分钟后触发的定时器,并...
在QT中,EventFilter是一个类,它可以重写`QObject::eventFilter()`方法来拦截并处理对象接收到的事件。当一个对象被设置为另一个对象的事件过滤器时,它会先于被过滤对象接收事件,如果事件过滤器处理了这个事件,...
QObject::connect(&button, &QPushButton::clicked, SLOT(printMessage(QString))); button.show(); return app.exec(); } ``` 在上述例子中,`std::bind`和`SLOT`宏分别将`printMessage`函数转换为可连接的槽...
Qt事件过滤器(Event Filter)允许你在Qt应用程序中捕捉和处理事件,而无需修改原始的事件处理...3. **处理特定类型的事件:** 在事件过滤器函数中,你可以通过 `event->type()` 检查事件的类型,并根据需要处理事件。