qt 自定義訊號為什麼可以不在cpp檔案實現,為何有時實現了會報重定義這樣的錯?

時間 2021-06-20 06:15:09

1樓:姚冬

Qt 的訊號是只需要宣告,不需要實現的,實現會由MOC預處理在生成的 moc檔案裡去實現。

你需要確認幾個事情

1. .h 檔案裡是否有 Q_OBJECT的巨集2.

改了標頭檔案後是否有重新 qmake3. 編譯生成的檔案裡是否有對應的 moc_*另外 Qt的自定義訊號可以寫在 cpp裡,只是你需要自己手動去包含 .moc 注意看生產的檔案裡是否有這個。

這是個最小的Qt例子,只有乙個 cpp檔案,注意看檔案結尾包含了 main.moc

>qmake -project

>qmake -tp vc

就可以生成 VC++工程

main.cpp

#include

class

Sender

:public

QObject

signals

:void

fire

();};

class

Receiver

:public

QObject

};int

main

(int

argc

,char

*argv

)#include

"main.moc"

2樓:

訊號和槽都會被轉成純C++的函式,但槽的函式定義需要自己實現,訊號只宣告、由QT元編譯器(moc)實現,如果你自己再實現一次當然會重複了

3樓:myd7349

今年2月份的時候搜過一些資料:

c++ - Qt question: What does the Q_OBJECT macro do? Why do all Qt objects need this macro?

Q_OBJECT in cpp file

Qt核心剖析: moc

Q_OBJECT竟然不能直接寫在.cpp檔案裡面----

時間長記不太清當時怎麼測了,可以參照一下第二個鏈結中的做法。orz。

為什麼很多軟體都有「快速安裝」和「自定義安裝」

朱宵 快速安裝,顧名思義,基本不需要提供任何資訊 序列號等必須資訊除外 即可進行安裝,而這些不需要提供的資訊其實已由安裝程式自帶的資訊提供完畢,包括但不限於 安裝目錄 將要安裝的元件 程式配置等等。自定義安裝則將快速安裝的預設配置提供給使用者進行自定義,舉個常見的栗子 Microsoft Offic...

為什麼黑魂血源的主角可以自定義捏臉,而只狼中的主角狼卻是固定形象呢?

馮勞厄 狼在劇情裡有很重要的戲份,還關係到與各個boss和NPC的戶動。如果增加玩家自定義選項的內容,相應的對話和行為就要做很多條分支。你看巫師3白狼不也是沒讓你捏臉就讓你選了幾條選項嘛。如果硬要改也是可以的,打各種亂七八糟的mod就行了。 嬌羞胡先生 劇情上就是這麼設定的啊!黑魂裡玩家控制的不死人...

搜狗手機輸入法為什麼不增加自定義短語功能?

李李 不太認同 楊磊的回答,理由如下 1,設想這幾種場景 需要頻繁輸入郵箱,且有多個郵箱時 需要輸入快遞位址 省份城市區域街道樓盤等 需要輸入身份證 護照號 學號等長串數字 字母間雜的證件號時,若能自定義快捷輸入簡直不要太方便,當然,我使用的是26鍵 2,如何證明這是小眾功能?另外,我之前一直以為手...