Code::Blocks 處理 Qt moc 的方法

本文详细记录了在Code::Blocks环境下实现Qt的信号槽机制所遇到的问题及解决过程,包括环境变量设置、生成Makefile的方法及编译过程中出现的各种错误解决办法。

實做 Qt 的 signal-slot 機制,
果然不簡單......Q.Q

其實正確來說,不是實作難,
是使用 Code::Blocks 去編譯難,
既然都有一個這麼好的 IDE 了,我就不希望還要使用 Command Line 的方式去編譯。@@

 

花了幾乎一兩天的時間,終於搞定它了!

網路上的資訊不是片片段段,
就是跟 Code::Blocks 無關,或是使用 minGW 當作編譯器,
為了找資料連法文、俄羅斯等各式各樣語文的網站都看了,
最後終於有了一個結論:
還真的挺麻煩的...... = =|||b

 

首先當新建一個 class 要使用 signal-slot 機制,
就會用到「Q_OBJECT 」這個關鍵字,
一但使用這樣的關鍵字就需要用 moc 來把 .h 文件轉成一個 moc_xxxx.cpp,(Ref. 《Programming with Qt》閱讀筆記 II
若不照著做就會出現以下錯誤訊息:

 

FindDialog.obj||error LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __thiscall CFindDialog::metaObject(void)const " (?metaObject@CFindDialog@@UBEPBUQMetaObject@@XZ)|
FindDialog.obj||error LNK2001: 無法解析的外部符號 "public: virtual void * __thiscall CFindDialog::qt_metacast(char const *)" (?qt_metacast@CFindDialog@@UAEPAXPBD@Z)|
FindDialog.obj||error LNK2001: 無法解析的外部符號 "public: virtual int __thiscall CFindDialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CFindDialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z)|
bin/Debug/TestQt4.exe||fatal error LNK1120: 3 個無法解析的外部符號

 

看了看 moc 的使用方法,似乎有點麻煩,
本來查到 C::B 有個 plugin:qtworkbench
但很可惜地竟然無法安裝?
QtWorkbench plugin 」中有人回說這是因為 C::B release 還不穩定 的關係,
聽起來挺可怕的,
結果就是無法用.........難道要為了這個 plugin 把所有 Nightly Build 都裝一遍測試看看嗎?=口="

然後就找到「Error compiling QT application 」這一篇,
下面有人有解答,但我看不懂,
因此又繼續找,
再看到「Qt-interest Archive - [Qt4] IDE for open-source edition 」時終於了解意思,
原來是要手動產生 tools 來產生 .pro 和 Makefile 啊。

回頭仔細看「Error compiling QT application 」這篇步驟,
卻面臨一個很大的問題:Build Method 是無法選擇的,固定是「Invoke compiler directly」

繼續找資料,找到了這篇:Problem with custom Qt4 makefiles with nighty build
嘿!這篇真的幫很大的忙!
雖然麻煩了點,但畢竟是個解答~~=ˇ=

結果呢......後來陸續發生了找不到 nmake 和「qglobal.h : fatal error C1083: 無法開啟包含檔案: 'stddef.h': No such file or directory 」錯誤訊息等問題,這都跟環境設定有關係。

把整個建置步驟整理如下:

 

【System Environment Variable】

這設在 Code::Blocks 內沒用,要設在系統環境變數中。

PATH: C:/Program Files/Microsoft Visual Studio 8/VC/bin;%PATH% (for nmake.exe)

INCLUDE: C:/Program Files/Microsoft Visual Studio 8/VC/INCLUDE;C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/include;%INCLUDE%

LIB: C:/Program Files/Microsoft Visual Studio 8/VC/LIB;C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib;%LIB%

 

【Code::Blocks tools setting】

使用「Tools > Configure tools... 」產生兩個工具。

<Tool#1>
Name : Generate Qt .pro file
Executable: C:/Qt/4.3.2/bin/qmake.exe (note must be full path)
Parameters: -project
Working Directory: ${PROJECT_DIR}

<Tool#2>
Name : Generate Qt makefile
Executable: C:/Qt/4.3.2/bin/qmake.exe (note must be full path)
Parameters: -makefile
Working Directory: ${PROJECT_DIR}

 

【Qt project setting】

  1. Project > Properties > Project Settings... 」勾選「This is a custom Makefile」。
  2. Project > Properties > Build targets 」將「Output filename」中,原本的值「bin/debug/projectname.exe」改成「debug/projectname.exe」,因為編譯後的執行檔會放在這個位置。
  3. Project > Build options... > "Make" commands 」改成以下設定:(其实要删除所有的 $target )
    clean project/target: $make -f $makefile $target-clean
    Dist-clean project/target: $make -f $makefile $target-distclean

 

【Qt project compiling】

  1. Run Tool#1  (即在 Tool菜单 下选择 )
    產生 .pro 檔,當檔案有變動(譬如新增或刪除檔案)時才需要執行。
  2. Run tools#2
    產生 Makefile。
  3. Compile project as usual

 

 

 

原文: http://blog.yam.com/csylvia/article/12863461

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值