QT 的Moc Uic Rcc有什麼用(360ui移植到eclipse)

來源:互聯網
上載者:User

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包含進去


編譯執行



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.