我想在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)
。为什么?我该如何解决这个问题?
修改:添加了Q_Object
- 宏,没有解决方案。
答案 0 :(得分:10)
将Q_OBJECT宏添加到子类并运行qmake。
此宏允许您使用信号和插槽机制。没有这个宏,moc就无法创建你的信号,所以你会得到信号不存在的错误。
代码应该是:
class ReadDPC: public QThread {
Q_OBJECT
请注意,当您使用新信号和插槽语法时,您可能会遇到编译时错误,您忘记添加此宏。如果您感兴趣,请在此处阅读更多内容:http://qt-project.org/wiki/New_Signal_Slot_Syntax
答案 1 :(得分:2)
当您打算使用Qt信号时插槽机制您必须在类的定义顶部添加Q_OBJECT
宏,才能生成正确的moc_
代码。
元对象编译器moc是处理Qt的C ++的程序 扩展。
moc工具读取C ++头文件。如果找到一个或多个类 包含Q_OBJECT宏的声明,它生成一个C ++源代码 包含这些类的元对象代码的文件。除其他外 事物,信号和插槽需要元对象代码 机制,运行时类型信息和动态属性 系统
答案 2 :(得分:1)