[英]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.