只用vs2008寫qt程式

來源:互聯網
上載者:User

標籤:

qt是一個c++的介面庫,其特點就是其源碼可以跨平台編譯,這樣在寫自己的小工具時可以方便地在windows,mac或linux環境下移植了。在windows下寫c++程式當然選vs,在mac下寫程式當然用xcode,在linux下就完全控制台吧。

本人僅僅將其看成是一個c++的庫,所以不想學習新的的IDE--qt creator,也不想去學qt designer,所以qt的預先處理都需要自己用命令來折騰。

Moc

從qt繼承而來的類只要用了關鍵字 Q_OBJECT,都必鬚生成其對應的moc檔案,命令如下

moc.exe myclass.h -o mac_myclass.cpp

其中myclass.h中有類有Q_OBJECT屬性。在vs項目中只需要添加mac_myclass.cpp檔案即可。

UI

雖然不使用designer來設計介面,但在編譯一個demo項目時都會用*.ui檔案,這時得先將其用uic.exe進行轉化

uic.exe app.ui -o ui_app.h

其中app.ui是用designer設計好的介面檔案, ui_app.h是產生的標頭檔。然後在c++項目中#include "ui_app.h"即可。

 

資源

qt定義了一套它自己的資源使用方式,其資源定義檔案形如*.qrc。

ras.qrc檔案其實就是一個xml檔案,其中就包含了ras檔案夾中的一些png檔案。

用如下的命令可以將ras.qrc檔案轉化成cpp代碼:

rcc.exe -no-compress ras.qrc -o ras.cpp

這樣在vs項目中添加ras.cpp檔案後,就可以用如下的路徑來使用資源。

QIcon icon_app(":/ras/app.png");

大致地看一下ras.cpp的代碼,可以發現qt應該是將映像的像素點轉化成c++位元組數組進行儲存。

perl代碼批量轉化

上面說的這些命令,如果只是一個小項目,還可以去手動輸入一個個命令,如果是一個大項目,那如果手動的話就簡單是惡夢了。下面本人用perl實現了自動轉化功能。

 1 use 5.010; 2 use warnings; 3 use strict; 4  5 sub main; 6 sub HaveQObject; 7 sub ui; 8 sub moc; 9 sub ras;10 11 main;12 13 sub main14 {15     say "\n**********moc**********";16     moc;17 18     say "\n**********ui**********";19     ui;20     21     say "\n**********ras**********";22     ras;23 }24 25 #將ui轉化為.h檔案26 sub ui27 {28     while (<*.ui>) {29         my @fs = split /\./, $_;30         my $h_file = "ui_$fs[0].h";31         system("uic $_ -o $h_file");32 33         say "create $h_file";34     }35 }36 37 #將有元資訊的.h檔案產生對應的.cpp檔案38 sub moc39 {40     while (<*.h>) {41         my $f = $_;42         if (HaveQObject($_)) {43             my @fs = split /\./, $f;44             my $c_file = "moc_$fs[0].cpp";45             system("moc.exe $f -o $c_file");46 47             say "create $c_file";48         }49     }50 }51 52 sub HaveQObject53 {54     my $filename = $_[0];55     open FILE, $filename;56     while (<FILE>) {57         chomp;58         s/^\s+//;59         s/\s+$//;60         if ("Q_OBJECT" eq $_) {61             return 1;62         }63     }64     return 0;65 }66 67 #將資源產生對應.h檔案68 sub ras69 {70     while (<*.qrc>) {71         my $s = substr($_, 0, rindex($_, "."));72         my $c = "ras_$s.cpp";73         system("rcc -no-compress $_ -o $c");74         say $c;75     }76 }
qt.pl

其中moc函數,在先判斷如果某個.h檔案中包括有Q_OBJECT則執行moc,

ui函數對*.ui檔案進行轉化產生對應的*.h檔案

ras函數對*.qrc檔案進行轉化產生對應的*.cpp檔案

去掉命令列視窗

一般c++的主函數是int main(int argc, char **argv),這裡產生的exe在運行時會帶一個命令列視窗,在完成最終的產品時實現將其去掉。可以這樣在vs中進行設定:

"連結器-系統-子系統"中選擇Windows

"連結器-進階-進入點"設定為mainCRTStartup

這樣就去掉了命令列視窗

只用vs2008寫qt程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.