[英]Undefined reference to signal in 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()
{
while(1)
{
usleep(50);
int counts = read_DPC();
emit currentCount(counts);
}
}
read_DPC()
是一个返回int
值的函数,也放在cpp文件中。
但是当我想编译它时,我得到了undefined reference to ReadDPC::currentCount(int)
的错误undefined reference to ReadDPC::currentCount(int)
。 为什么? 我怎么解决这个问题?
编辑:添加了Q_Object
-Macro,没有解决方案。
将Q_OBJECT宏添加到子类并运行qmake。
此宏允许您使用信号和插槽机制。 如果没有这个宏,moc就无法创建信号,因此您会收到信号不存在的错误。
代码应该是:
class ReadDPC: public QThread {
Q_OBJECT
请注意,当您使用新的信号和插槽语法时,您可能会遇到编译时错误,您忘记添加此宏。 如果您对此感兴趣,请在此处阅读更多内容: http : //qt-project.org/wiki/New_Signal_Slot_Syntax
当您打算使用Qt信号和插槽机制时,您必须在类的定义顶部添加Q_OBJECT
宏,以便生成正确的moc_
代码。
元对象编译器moc是处理Qt的C ++扩展的程序。
moc工具读取C ++头文件。 如果它找到一个或多个包含Q_OBJECT宏的类声明,它将生成一个C ++源文件,其中包含这些类的元对象代码。 除此之外,信号和槽机制,运行时类型信息和动态属性系统都需要元对象代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.