C++ QT中信号的未定义参考
我想在Qt中的一个单独文件中创建一个类,然后在我的主文件中使用这个类(背景:次要线程更新GUI)。因此,我编写了C++ QT中信号的未定义参考,c++,multithreading,qt,C++,Multithreading,Qt,我想在Qt中的一个单独文件中创建一个类,然后在我的主文件中使用这个类(背景:次要线程更新GUI)。因此,我编写了ReadDPC.h-文件: class ReadDPC: public QThread { //First edit: Q_OBJECT //End of first edit public: void run(); signals: void currentCount(int); }; 在我的ReadDPC.cpp-文件中: void ReadDPC::run()
ReadDPC.h
-文件:
class ReadDPC: public QThread
{
//First edit:
Q_OBJECT
//End of first edit
public:
void run();
signals:
void currentCount(int);
};
在我的ReadDPC.cpp
-文件中:
void ReadDPC::run()
{
while(1)
{
usleep(50);
int counts = read_DPC();
emit currentCount(counts);
}
}
read\u DPC()
是一个返回int
-值的函数,该值也位于cpp文件中。但是当我想编译它时,我得到了错误
对ReadDPC::currentCount(int)
的未定义引用。为什么?我怎样才能解决这个问题
编辑:添加了
Q\u对象
-宏,没有解决方案。将Q\u对象宏添加到子类并运行qmake
此宏允许您使用信号和插槽机制。没有这个宏,moc无法创建您的信号,所以您会得到错误,您的信号不存在
代码应为:
class ReadDPC: public QThread {
Q_OBJECT
请注意,当您使用新的信号和插槽语法时,可能会出现编译时错误,您忘记了添加此宏。如果您感兴趣,请在此处阅读更多内容:当您打算使用Qt信号和插槽机制时,您必须在类的定义顶部添加
Q_对象
宏,以便生成正确的moc
代码
为什么会这样?
元对象编译器MOC是处理Qt C++的程序。 扩展
MOC工具读取C++头文件。如果它找到一个或多个类 包含QHObjor宏的声明,它产生C++源 包含这些类的元对象代码的文件。除其他外 因此,信号和插槽需要元对象代码 机制、运行时类型信息和动态属性 系统
@arc_lube尝试清理并重建项目。清理项目,重建项目,无更改:-(.我忘记添加一些附加头文件了吗?@arc_lube相同问题:op刚刚运行qmake:是否在头上运行
moc
,并将生成的.cpp
文件包含在项目中(编译/链接)?不,我只运行了qmake。这里有一个关于使用信号和插槽所需的说明:还请注意,不建议使用线程继承QThread:另外,您可以阅读本文:添加Q_对象宏后,必须在生成之前运行qmake