我在Qt / C ++中开发了一个应用程序,该应用程序目前正在一个线程中工作,并且基于UI和框架。 UI和框架使用Qt提供的信号/插槽机制一起讨论。我添加了线程,因为框架内的一些操作冻结了UI。
我面临的问题是,由于
,现在应用程序不再有效了QObject::connect: Cannot queue arguments of type 'uint32_t'
(Make sure 'uint32_t' is registered using qRegisterMetaType().)
我所做的是,在主要声明qRegisterMetatype,但它仍然抱怨。我真的不知道我还要做什么。
我已经在下面给出了删除的基本过程。
的main.cpp
qRegisterMetaType<uint32_t>("uint32_t");
qRegisterMetaType<QList<QTreeWidgetItem*> >("QList<QTreeWidgetItem*>");
Treewidget.cpp
void TreeWidget::DeleteAction() {
....
connect(this,&PulsTreeWidget::RequestDelete, &m_Framework, &PulsFramework::DeleteItem);
emit RequestDelete(item, nb_items);
}
Framework.cpp
void Framework::DeleteItem(QList<QTreeWidgetItem *> item, uint32_t total_item) {...}
有什么想法吗?我是否需要不使用uint32_t,而是更改它的定义
由于
答案 0 :(得分:0)
你正在做一些事情。我的例子:
<强> Object.h 强>
#ifndef OBJECT_H
#define OBJECT_H
#include <QtCore>
class Object : public QObject
{
Q_OBJECT
public:
explicit Object(QObject *parent = 0);
void emitSignal(uint32_t v);
public slots:
void mySlot(uint32_t v);
signals:
void mySignal(uint32_t v);
};
#endif // OBJECT_H
<强> Object.cpp 强>
#include "Object.h"
Object::Object(QObject *parent) :
QObject(parent)
{
}
void Object::emitSignal(uint32_t v)
{
emit mySignal(v);
}
void Object::mySlot(uint32_t v)
{
qDebug() << v;
}
<强>的main.cpp 强>
#include "Object.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
qRegisterMetaType < uint32_t >("uint32_t"); // <--------------
Object o1, o2;
QThread t1, t2;
o1.moveToThread(&t1);
o2.moveToThread(&t2);
QObject::connect(&o1, SIGNAL(mySignal(uint32_t)), &o2, SLOT(mySlot(uint32_t)));
QObject::connect(&o2, SIGNAL(mySignal(uint32_t)), &o1, SLOT(mySlot(uint32_t)));
t1.start();
t2.start();
o1.emitSignal(5);
o2.emitSignal(10);
return app.exec();
}
<强>输出:强>
5
10
删除qRegisterMetaType < uint32_t >("uint32_t");
行时,还会抱怨:
QObject::connect: Cannot queue arguments of type 'uint32_t'
(Make sure 'uint32_t' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'uint32_t'
(Make sure 'uint32_t' is registered using qRegisterMetaType().)
P.S。:我不喜欢你的连接+发射对。你知道,你需要只将信号连接到插槽一次才能工作吗?在每个信号发出之前,您不需要这样做。