Moc 主要是用於 將類中包含Q_OBJECT 的類裡面的 訊號 和槽 處理 成moc_xxx檔案。
因為QT 訊號與 slot 這一部分不是純C++的 所以要通過 moc來將 Q_OBJECT的部分包含的資訊編譯進去。
當不使用訊號這些的時候 去掉Q_OBJECT 也可以編譯通過。只是無法處理訊號這些。
Rcc 主要是將 rc資源檔 轉成位元組流形式 的CPP檔案,所有的資源都可以通過這個檔案擷取得到。
Uic Uic主要是將 介面設計ui檔案轉換成 ui_xxx 其實也就是將設計的ui轉成成C代碼
比如
<width>600</width>
<height>400</height 這種
變成 xxx.setwidth(600) setHeight(400);
當我們不想要使用qt designer的時候。可以自己直接代碼實現這些。這樣更有助於理解。
1 自己實現 在建構函式裡面實現所有。你需要刪除它構造的 include "ui_xxx.h"
刪除他的private:: Ui::xxxClass ui;
2 由QT來產生 他會在你的當前類裡面自動添加一個ui_xxx.h
這個ui_xxx包含一個 xxxClass類。裡面有一個setui函數。這個函數替你實現了 xxx.setwidth(600) setHeight(400);
當前類裡面有一個 xxxClass的private對象
結合還有一篇eclipse上不使用QT IDE的編譯。移植。
移植代碼來自於
http://blog.csdn.net/liang19890820
╰☆奮鬥ing孩子`
可以搜到他的360ui下載
將所有的代碼添加到 eclipse設定好環境以後 編譯(所有的.h和.cpp)不包括resources.h和resource.rc這兩個是windows上面的
出問題
QtDemo/Debug/../about_us.cpp:5: undefined reference to `vtable for AboutUsDialog'
主要是由於這些類使用了 Q_OBJECT 需要moc的擴充。
先嘗試解決 AboutUsDialog的問題。
調用QTDIR目錄BIN的Moc處理這些cpp
export PREIN=/xxx/QtDemo
export PREOUT=/xxx/QtDemo/Out
./moc $PREIN/about_us.h -o $PREOUT/moc_about_us.cpp
./moc $PREIN/account_item.h -o $PREOUT/moc_account_item.cpp
./moc $PREIN/change_skin_widget.h -o $PREOUT/moc_change_skin_widget.cpp
./moc $PREIN/character_widget.h -o $PREOUT/moc_character_widget.cpp
./moc $PREIN/clabel.h -o $PREOUT/moc_clabel.cpp
./moc $PREIN/content_widget.h -o $PREOUT/moc_content_widget.cpp
./moc $PREIN/drop_shadow_widget.h -o $PREOUT/moc_drop_shadow_widget.cpp
./moc $PREIN/kill_mummy_widget.h -o $PREOUT/moc_kill_mummy_widget.cpp
./moc $PREIN/loading_widget.h -o $PREOUT/moc_loading_widget.cpp
./moc $PREIN/login_dialog.h -o $PREOUT/moc_login_dialog.cpp
./moc $PREIN/main_menu.h -o $PREOUT/moc_main_menu.cpp
./moc $PREIN/main_widget.h -o $PREOUT/moc_main_widget.cpp
./moc $PREIN/msg_box.h -o $PREOUT/moc_msg_box.cpp
./moc $PREIN/push_button.h -o $PREOUT/moc_push_button.cpp
./moc $PREIN/register_widget.h -o $PREOUT/moc_register_widget.cpp
./moc $PREIN/setting_dialog.h -o $PREOUT/moc_setting_dialog.cpp
./moc $PREIN/shadow_widget.h -o $PREOUT/moc_shadow_widget.cpp
./moc $PREIN/skin_widget.h -o $PREOUT/moc_skin_widget.cpp
./moc $PREIN/system_tray.h -o $PREOUT/moc_system_tray.cpp
./moc $PREIN/title_widget.h -o $PREOUT/moc_title_widget.cpp
然後把產生的moc_xxx.cpp放入目錄中 編譯。
這時候編譯已經可以通過了。這是運行結果。沒有資源的樣子
由於我們沒有設計ui 而是直接寫的。所以這裡uic不需要使用。
接下來轉換資源Resource檔案
把360safe.qrc轉成二進位的cpp流
./rcc /xxx/QtDemo/Resources/360safe.qrc -o /xxx/QtDemo/360resorce.cpp
把這個cpp包含進去
編譯執行