繁体   English   中英

QT中信号的未定义参考

[英]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 ++源文件,其中包含这些类的元对象代码。 除此之外,信号和槽机制,运行时类型信息和动态属性系统都需要元对象代码。

http://qt-project.org/doc/qt-4.8/moc.html#moc

  1. 添加Q_OBJECT
  2. 清除您的项目
  3. 运行qmake
  4. 只有在那之后,运行你的项目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM