用 QT Designer 来快速学习 QT.docx
- 文档编号:30567152
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:49
- 大小:279.18KB
用 QT Designer 来快速学习 QT.docx
《用 QT Designer 来快速学习 QT.docx》由会员分享,可在线阅读,更多相关《用 QT Designer 来快速学习 QT.docx(49页珍藏版)》请在冰豆网上搜索。
用QTDesigner来快速学习QT
http:
//www.study-area.org/tips/qd/qt.html
用QTDesigner來快速學習QT
作者﹕GoldenCat
寫在前面:
這裡只是告訴大家一種如何快速學習QT的方法.這裡也只對QTDesigner
和QT作一個簡單的介紹.讓沒有寫過QT的人能對QT有一個初步的認識.如果您
真的對QTProgramming很有興趣.這裡我建議您去看看O'REILY出版的Programming
withQT和Bible出版的KDE2/QTProgramming.這兩本書將會給您帶來一個好的
開始.
這篇文章適合您嗎?
這篇文章只是對QT的一個入門介紹.如果您有興趣認識一下QT這種語言,那麼
這篇文章就很適合您了.
如果您對C++能有一些的了解,那麼您將會很輕鬆的看完這篇文章.如果您什麼
程式語言也沒有學過.但也想一窺QT的容貌.那麼也沒有關係.這裡都是些非常間單的東西.
也需會成為您學習寫程式的一個起點.
如果您本身已經在開發、學習QT/KDE或者Xwindow有關的程式設計.那就只能當
是打發時間看看玩了.這篇短短的文章沒有寫到很多的東西.對於這些高手們,我唯一能提共
的一個經驗就是多多去看$QTDIR/include下面的東西.
1.什麼是QT.
用Linux的人,一定都知道QT是什麼.而利用QT編譯出來的KDE桌面系統,
更是讓Linux有了一次能和Windows的GUI相媲美的機會.甚至有人說,KDE
的桌面在圖形上,還勝過了Windows95了.那麼QT到底是什麼呢?
其實QT
就是基於C++語言上的一種專門用來開發GUI介面的程式.這裡面包括了:
button;label;frame...等等很多的可以直接調用的東西.
2.為什麼選擇QT
2.1QT是基於C++的一種語言
相信C/C++目前還是一種很多人都在學習的語言.QT的好處就在於QT本身
可以被稱作是一種C++的延伸.QT中有數百個class都是用C++寫出來的.
這也就是說,QT本身就具備了C++的快速、簡易、Object-OrientedProgramming
(OOP)等等無數的優點.
2.2QT具有非常好的可移植性(Portable)
QT不只是可以在Linux中運作.也同樣可以運行在MicrosoftWindows中.這也就
意味者,利用QT編寫出來的程式,在幾乎不用修改的情況下,就可以同時在Linux
中和MicrosoftWindows中運行.QT的應用非常之廣泛,從Linux到Windows從
x86到Embedded都有QT的影子.
3.什麼是QTDesigner
簡單的來說QTDesigner是一個GUI的工具.這個工具可以幫助我們來加快寫QT
程式的速度.利用QTDesigner可以用一種所見既所得的方式,來產生QT程式的
GUI介面的程式碼.通過增加一些功能,就可以完成一個程式了.利用QTDesigner
可以非常快速的學會QT,而我們這裡說利用QTDesigner來學習QT而不是利用
QTDesigner來寫QT,這裡的區別就在於,QTDesigner所產生的程式碼有些繁瑣.
跑起來也比較的慢些.我們這裡只是利用QTDesigner來幫助我們學習.而不是直接
去跑QTDesigner生成的程式碼.
3.基本要求
因為這篇文章主要是告訴大家如何利用QTDesign來達到快速學習QT的.
所以您最也要做到:
您需要有一台可以跑Linux的電腦或者MicrosoftWindows的電腦
足夠的RAM和HardDisk用以安裝、編譯QT
您的Linux中需要安裝有KDE、QT、QTDesigner、g++等等程式.
您如果適用MicrosoftWindows,則您需要VC++和QTForWindows
Linux的使用者最好還能安裝一個Kdevelop(一個非常好的用來開發QT的DevelopEnverment)
4.QTDesigner
簡單的介紹--從PushButton開始
假設您一切都安裝好了.現在我們打開QTDesigner吧.打開後,選擇New->Dialog
這時侯,您的QTDesigner中就會出現一個From1來.現在我們click一下上面的tools中
的那個pushbutton,(標有OK的圖標)並且用mouse選擇到一定的大小.在這個pushbutton
上面用您的mousedoubleclick一下.我們就可以改變pushbutton的label了.這裡我們把
pushbutton1這幾個字,換成Exit,然後直接按Enter或者用mouse選擇OK也可以.現在我們
看到,那個button中的標籤已將變成Exit了.我們這時侯還需要給這個ExitButton一個
signal(信號),這樣當您在Exit這個Button上click的時侯.QT才知道如何去處理這個信
號.我們按一下F3(connectsingnalslot)然後在那個ExitButton上面Click一下.這時
侯我們就看到了EditConnection的Dialog了.在Signal中選擇clicked,在slot中,先選
擇setFocus()就好了.這時侯選擇OK.我們就算是完成了.如果想看看這個小程式長什麼樣子.
可以用CTRL+T來看PreView.(seefigure1)
figure1
首先在您的$HOME中建立一個qt_program的Directory出來.這個Directory將會
作為我們存放文件的地方.現在我們用File->Save把這個文件存為form1.ui放在$HOME/qt_program
的目錄下.現在如果大家打開form1.ui來看一看.會發現那是一堆有很多 的東西.所以我們需要用一個叫做uic的程式來把.ui文件轉換成QT可以使用的.cpp和.h文件. 用下面的指令就可以生成我們需要的.h文件了 uic-oform1.hform1.ui 而生成.cpp文件則需要用以下的指令: uic-iform1.h-oform1.cppform1.ui 這時侯,form1.h中就會看到一個標準的QT需要的.h文件 1.#ifndefFORM1_H 2.#defineFORM1_H 3.#include 4.#include 5.classQVBoxLayout; 6.classQHBoxLayout; 7.classQGridLayout; 8.classQPushButton; 9.classForm1: publicQDialog 10.{ 11.Q_OBJECT 12.public: 13.Form1(QWidget*parent=0,constchar*name=0,boolmodal=FALSE,WFlagsfl=0); 14.~Form1(); 15.QPushButton*PushButton1; 16.}; 17.#endif//FORM1_H 1-2: 定義FORM1.H這個文件 3-4: 這裡是我們需要用到的兩個.h文件 5-7: 我們根本用不到,qtdesigner自己產生的 8: QPushButton需要用到這個class 9-11: 我們的form1是based在QDialog上面的 12: 公開的(可以在以後的程式中使用.用過C++的人一定明白) 13: Form1的架構 14: 清除Form1 15: 產生一個pushbutton(就是那個標有exit的按鈕 17: 結束對FORM1.H的定義 而form1.cpp文件如下: 1.#include"form1.h" 2.#include 3.#include 4.#include 5.#include 6.#include 7./* 8.*ConstructsaForm1whichisachildof'parent',withthe 9.*name'name'andwidgetflagssetto'f' 10.* 11.*Thedialogwillbydefaultbemodeless,unlessyouset'modal'to 12.*TRUEtoconstructamodaldialog. 13.*/ 14.Form1: : Form1(QWidget*parent,constchar*name,boolmodal,WFlagsfl) 15.: QDialog(parent,name,modal,fl) 16.{ 17.if(! name) 18.setName("Form1"); 19.resize(596,480); 20.setCaption(tr("Form1")); 21.PushButton1=newQPushButton(this,"PushButton1"); 22.PushButton1->setGeometry(QRect(130,160,161,71)); 23.PushButton1->setText(tr("Exit")); 24.//signalsandslotsconnections 25.connect(PushButton1,SIGNAL(clicked()),PushButton1,SLOT(setFocus())); 26.} 27./* 28.*Destroystheobjectandfreesanyallocatedresources 29.*/ 30.Form1: : ~Form1() 31.{ 32.//noneedtodeletechildwidgets,Qtdoesitallforus 33.} 1: 我們上面的定義文件 2: pushbutton所需要的.h文件 3-6: 我們根本用不到,qtdesigner自己產生的 7-13: QTDesigner產生的註解 14-15: Form1的結構 17-18: 如果Form1: Form1中沒有pass一個名子過來.那麼就命名為Form1 19: resize 20: 把顯示出來的那個Dialog的名子定為Form1,也就是window中左上角的字 21: 做出一個新的button,名子為PushButton1 22: 這裡設定了pushbutton在這個dialog中的位置.Qrect(130,160,161,71)這裡是說在一 個Dialog中,以左邊最上面來算,位置是(0,0),所以說,這裡的130(橫向)和160(縱向)就是說我 們從(0,0)開始,往左邊跑130,往下跑160.這樣我們就算出了pushbutton這個按鈕畫在那裡了.後面的161, 71則是定義這個pushbutton到底要畫多大,設定了長和高 23: 通過呼叫setText指令,我們可以在這個button上面給入我們需要的文字.這裡是Exit 24: QTDesigner產生的註解 25: 上面就是處理當接收到clicked的信號(singal)以後,我們所作的事情(setFocusonPushButton1) connect這裡是告訴程式連接一個信號,PushButton1,SIGNAL(clicked()),是說信號是由PushButton1發出, 發出的信號為mouseclicked,PushButton1,SLOT(setFocus())表示信號發出以後,目標(Object)為PushButton, event是setFocus()動作 26: 主程式結束 27-29: QTDesigner的註解 30-33: 清除Form1 由於我們要常常用到QTDesigner,也就是說,需要常常用到uic這隻程式.為了省去每次都要 打一堆東西的麻煩.我們來寫一各小script來處理.ui檔案. 不難看出,uic在處理/生成.h.cpp檔案的時侯,用到了兩個指令: uic-oform1.hform1.ui uic-iform1.h-oform1.cppform1.ui 所以我們的script就寫成: ############################################################### #! /bin/sh# #myuicprogramconvert.uito.cpp.hbycallinguic# # INPUT_UI=$@# #這裡讀取外面傳回來的文件名# # # if[! -f"$INPUT_UI"]# then# echo"UICFile$INPUT_UINotFound"# echo# echo"Useragemyuicinput_file.ui"# echo# exit1# fi# #上面的語句檢查我們所輸入的.ui文件是否存在# #如果找不到指定的.ui文件,則顯示一個簡短的# #使用說明# # INPUT_H=`echo$@|cut-d'.'-f1`.h# #這裡我們利用cut來處理輸入的.ui文件.# #得到一個.h的文件名# # INPUT_CPP=`echo$@|cut-d'.'-f1`.cpp# #同樣的道理,利用cut產生一個.cpp的文件名# # uic-o$INPUT_H$INPUT_UI# #這裡就是利用.ui產生.h的文件# # uic-i$INPUT_H-o$INPUT_CPP$INPUT_UI# #利用.h和.ui產生.cpp文件.# # ############################################################### 我門把這個文件存為myuic.並切chmod+x變成可執行檔案. 然後cp到/usr/bin上面.如果您在電腦中沒有root的權限. 可以在自己的$HOME目錄中做一個bin的Directory出來. 然後去編輯您的.bash_profile(這裡假設您用的是bash) 如果您的.bash_profile中本身已經有了PATH這段文字,那麼 您只要在原本的PATH後面加上: $HOME/bin就可以了.如果沒有 那麼就在您的.bash_profile中寫入: PATH=$PATH: $HOME/bin exportPATH 這樣您以後就可以直接執行myuic這個文件了.現在試試看用myuic來處理 剛剛的那個form1.ui這個文件吧.先把舊的.h.cpp都刪除掉: rm-f*.cpp*.h 然後用myuic來生成新的.cpp.h文件: myuicform1.ui 這時候用ls就會看到form1.cppform1.hform1.ui這三個文件了 這時侯我們只需要寫一個小的main.cpp就可以編譯form1.cpp了. main.cpp非常的簡單 #include"form1.h" #include intmain(intargc,char**argv) { KApplicationapp(argc,argv,"Form1");//KDE是建立在QT的基礎上得所以KApplication //所以kapp.h實際上包含了qapplication.h Form1*form1=newForm1(); form1->show(); app.setMainWidget(form1); return(app.exec()); } 基本上來說,很簡單.然後當然就是編譯啦.我建議寫出來的東西都用Kdevelop來解決.首先Kdevelop 介面非常的友善.又能省下寫Makefile的麻煩.打開Kdevelop以後,選擇項目->新建,KDE2-Normal, 然後選擇Next,在這一頁中.注意不要在任何選項中打"x",因為我們用不到.反而會增加麻煩.最後 一直next,然後create,exit.這時侯我們就已經有一個新的項目可以用了.在menu中選擇: 項目->添加現存文件.然後把qt_program中的form1.cppform1.h和main.cpp加入.這時候只要按 一下F9,Kdevelop就會自動幫您把程式compile出來.並且執行.程式執行後,我們不能用click那個 ExitButton退出程式.因為我們並沒有給他退出的信號.現在讓我們來把程式碼作些改動: ########################################################### #form1.h #ifndefFORM1_H #defineFORM1_H #include classQPushButton; classForm1: publicQDialog { Q_OBJECT public: Form1(QWidget*parent=0,constchar*name=0); QPushButton*PushButton1; }; #endif//FORM1_H ################################################################# #form1.cpp #include"form1.h" #include #include Form1: : Form1(QWidget*parent,constchar*name): QDialog(parent,name) { setCaption(tr("Form21")); PushButton1=newQPushButton(this,"PushButton1"); PushButton1->setGeometry(QRect(130,160,161,71)); PushButton1-vsetText(tr("Exit")); connect(PushButton1,SIGNAL(clicked()),kapp,SLOT(quit())); } Form1: : ~Form1(){} #################################################################### main.cpp保持不變.經過一番簡化.程式碼馬上簡單很多了. 這裡我們除了把一些由QTDesign做出的不必要的code挑除以外.對form1.cpp 做了兩個小改動. 1.增加了#include 2.我們把: connect(PushButton1,SIGNAL(clicked()),PushButton1,SLOT(setFocus())); 改變為 connect(PushButton1,SIGNAL(clicked()),kapp,SLOT(quit())); 同樣的信號傳送,但是目標對象有所改變.現在目標將作用在kapp上面也就是我們 的主程式(mainapplication),而SLOT則是呼叫quit(),現在Kdevelop中更改 程式碼.然後按下F9.等待程式運行.這時侯我們的程式,只要在那個Exit的Button 上面用mouseclick一下.這個程式就完全關閉了. 現在我們在這個PushButton中再增加一些功能.我們來看看QTDesigner中的ToolTip 功能.如果您的QTDesigner中PropertyEdit並沒有自動出現.那麼請在QTDesigner 中選擇Menu中的Windows然後選擇PropertyEdit.只要在PushButton1那個Button 上面用mouseclick一下.就可以對Pushbutton1的Property進行編輯.在Property Edit中的ToolTip後面可以進行文字輸入的地方,打入下面的文字: ClickOnthisButtonWillExitMainWindow. 然後sava文件.(Form1.ui)在用我們的小script呼叫uic程式把,Form1.ui轉成 Form1.h和Form1.cpp myuicform1.ui 這時侯我們來觀察生成的form1.cpp文件,我們會發現現在這裡面比一前多了些東西. 現在這裡多了一行: QToolTip: : add(PushButton1,tr("ClickeOnthisButtonWillExitMainWindow.")); 這裡,我們用QToolTip中的add,在Object(PushButton1)上面加入"ClickeOnthisBut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT Designer 来快速学习 快速 学习