移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)(174)課件_第1頁(yè)
移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)(174)課件_第2頁(yè)
移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)(174)課件_第3頁(yè)
移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)(174)課件_第4頁(yè)
移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)(174)課件_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)第四講:Meego應(yīng)用開(kāi)發(fā)基礎(chǔ)移動(dòng)應(yīng)用軟件開(kāi)發(fā)技術(shù)課程建設(shè)小組北京大學(xué)二零一一年*致謝:感謝Intel對(duì)本課程項(xiàng)目的支持課程內(nèi)容Qt介紹Qt安裝基于QT的Hello World示例程序Qt中主要類(lèi)的介紹Qt的信號(hào)槽機(jī)制Qt中主要控件介紹Qt介紹Qt是跨平臺(tái)的應(yīng)用程序和UI框架,包括跨平臺(tái)類(lèi)庫(kù)集成開(kāi)發(fā)環(huán)境跨平臺(tái)IDE一次性開(kāi)發(fā)可在不同桌面和嵌入式操作系統(tǒng)部署Qt特征一面向?qū)ο驫t具有模塊設(shè)計(jì)和注重軟件構(gòu)件或元素的可重用性的特點(diǎn)構(gòu)件支持Qt提供信號(hào)signal和槽slot的概念,支持對(duì)象之間在彼此不知道對(duì)方的情況下合作,使得Qt適合構(gòu)件編程友好的聯(lián)機(jī)幫助Qt提供了大量的聯(lián)機(jī)參考

2、文件Qt特征二便利性Qt是跨平臺(tái)的GUI工具包,對(duì)編程者隱藏了處理不同窗口系統(tǒng)時(shí)的潛在問(wèn)題國(guó)際化Qt為本地化應(yīng)用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國(guó)語(yǔ)言Qt特征三豐富的API函數(shù)Qt為開(kāi)發(fā)者提供了大量的函數(shù)可用戶化外觀Qt支持主題,基于Qt的應(yīng)用程序能夠在Windows外觀,Motif外觀以及其他一些用戶外觀主題之間切換完整的組件工具Qt編程的基本模塊叫做組件,Qt含有用來(lái)創(chuàng)建專(zhuān)業(yè)外觀用戶界面需要的所有組建Qt介紹Who uses Qt?Write code once to target multiple platformsCreate amazing user

3、experienceDo more with less and fasterBlend web and native code in a single applicationQt SDKQt SDKQt中主要的類(lèi)介紹QObject QObject類(lèi)是所有能夠處理signal,slot和事件的Qt對(duì)象的基類(lèi),原型如下:QObject:QObject(Qobject *parent=0,const char *name=0)在上面的函數(shù)中,如果parent為0則構(gòu)造一個(gè)無(wú)父的對(duì)象;如果對(duì)象是一個(gè)組件,則它會(huì)成為頂層窗口。Qt中主要的類(lèi)介紹2. QApplicationQApplication類(lèi)負(fù)責(zé)

4、GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來(lái)自窗口系統(tǒng)和其他資源的事件處理應(yīng)用程序的開(kāi)始,結(jié)束以及會(huì)話管理QApplication是QObject類(lèi)的子類(lèi)Qt中主要的類(lèi)介紹3. Qwidget QWidget是所有用戶接口對(duì)象的基類(lèi),繼承了 QObject類(lèi)的屬性 組件是用戶界面的單元組成部分,接收鼠標(biāo), 鍵盤(pán)和從其它窗口系統(tǒng)來(lái)的事件 QWidget類(lèi)有很多成員函數(shù),但一般不直接使用,而通過(guò)子類(lèi)繼承來(lái)使用其函數(shù)功能QWidget 是QObject類(lèi)的子類(lèi)信號(hào)和槽信號(hào)和槽機(jī)制是Qt的一個(gè)主要特征,是Qt與其它工具包最不相同的部分。在圖形用戶界面編程中,經(jīng)常會(huì)出現(xiàn)窗

5、口的一個(gè)部件發(fā)生的變化會(huì)被通知給另一個(gè)部件。Qt采用信號(hào)和槽實(shí)現(xiàn)對(duì)象部件之間的通信信號(hào)和槽的聲明一在Qt程序設(shè)計(jì)中,包含signals和slot的類(lèi)都要加上Q_OBJECT的定義。下面給出一個(gè)在類(lèi)中定義signal和slot的例子 class Student:public Qobject Q_OBJECTpublic:Student() myMark = 0;int getMark() const return myMark;public slots: void setMark(int newMark);signals:void markChanged(int newMark);private

6、:int myMark; 信號(hào)和槽的聲明二 Signal的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,下面的例子中在事件處理結(jié)束后發(fā)出signal void Student:setMark(int newMark) if(newMark != myMark) myMark = newMark;emit markChanged(myMark); 信號(hào)和槽的連接一在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來(lái)。Connect()函數(shù)屬于QObject類(lèi)的成員函數(shù),能夠連接signal和slot,也能夠連signal和signal。函數(shù)原型如下 bool

7、 connect(const QObject *sender, const char *signal, const QObject *receiver, const char *slot)其中第一個(gè)和第三個(gè)參數(shù)指出signal和slot屬于的對(duì)象或組件信號(hào)和槽的連接二使用connect()函數(shù)進(jìn)行連接的時(shí)候,還需要用到SIGNAL()和SLOT()兩個(gè)宏,使用方法如下:QLabel *label = new QLabel;QScrollBar *scroll = new QScrollBar;QObject:connect(scroll, SIGNAL(valueChanged(int), l

8、abel, SLOT(setNum(int);信號(hào)和槽的連接方式一同一個(gè)信號(hào)連接到多個(gè)槽connect(slider, SIGNAL(valueChanged(int), spinBox, SLOT(setValue(int);connect(slider, SIGNAL(valueChanged(int), this, SLOT(updateStatusBarIndicator (int);多個(gè)信號(hào)連接到同一個(gè)槽Connect(lcd, SIGNAL(overflow(), this, SLOT(handleMathError(); Connect(calculator, SIGNAL(di

9、visionByZero(), this, SLOT(handleMathError();信號(hào)和槽的連接方式二一個(gè)信號(hào)連接到另外一個(gè)信號(hào)connect(lineEdit, SIGNAL(textChanged(const Qstring&), this, SLOT(updateRecord(const Qstring&)取消一個(gè)連接 disconnect(lcd, SIGNAL(overflow(),this, SLOT(handleMathError();取消一個(gè)連接不是很常用,因?yàn)镼t會(huì)在一個(gè)對(duì)象被刪除后自動(dòng)取消這個(gè)對(duì)象所包含的所有連接Qt安裝Qt 下載 /downloadsQt安裝下載安

10、裝文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安裝步驟如下: 1.添加執(zhí)行權(quán)限 chmod u+x Qt_SDK_Lin32_offline_v1_1_beta_en.run 2.運(yùn)行安裝文件 ./ Qt_SDK_Lin32_offline_v1_1_beta_en.run 3. 添加環(huán)境變量 將Qt安裝目錄下的bin目錄加入到環(huán)境變量PATH中Hello World程序?qū)嵗齽?chuàng)建目錄 mkdir /examples/hello創(chuàng)建源文件 touch hello.cpp編寫(xiě)源文件 vi hello.cppHello World程序?qū)嵗袚Q到hel

11、lo目錄 cd /examples/hello創(chuàng)建平臺(tái)獨(dú)立的工程文件project file qmake project創(chuàng)建平臺(tái)獨(dú)立的Makefile文件 qmake 編譯工程 make運(yùn)行程序 ./helloQt對(duì)話框?qū)υ捒蚴且环N特殊的窗口,一般用來(lái)提供反饋信息或從用戶獲取輸入。給用戶提供了同應(yīng)用程序進(jìn)行交互的方式Qt對(duì)話框模態(tài)對(duì)話框最普遍的對(duì)話框。在未消失前用戶不能夠與同一個(gè)應(yīng)用程序的其他窗口進(jìn)行交互,直到該對(duì)話框關(guān)閉。非模態(tài)對(duì)話框當(dāng)對(duì)話框打開(kāi)的同時(shí),用戶還可與同一應(yīng)用程序的其他窗口進(jìn)行交互。Qt對(duì)話框Qt對(duì)話框的類(lèi)層次結(jié)構(gòu)圖QWidgetQialogQColorDialogQProces

12、sDialogQFileDialogQInputDialog幾種Qt內(nèi)置對(duì)話框介紹顏色對(duì)話框QColorDialog,允許用戶選擇設(shè)置顏色錯(cuò)誤對(duì)話框QErrorDialog,顯示錯(cuò)誤信息文件對(duì)話框QFileDialog,允許用戶選擇一個(gè)或多個(gè)文件或目錄字體對(duì)話框QFontDialog,允許用戶選擇、設(shè)置字體輸入對(duì)話框QInputDialog,允許用戶輸入文本信息頁(yè)設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁(yè)面設(shè)置進(jìn)度對(duì)話框QProgressDialog,指示出一項(xiàng)操作的工作進(jìn)度,而且提示用戶該操作是否停滯打印對(duì)話框QPrintDialog,配置打印機(jī)相關(guān)選項(xiàng)幾種Qt內(nèi)置對(duì)話

13、框介紹顏色對(duì)話框QColorDialog,允許用戶選擇設(shè)置顏色錯(cuò)誤對(duì)話框QErrorDialog,顯示錯(cuò)誤信息文件對(duì)話框QFileDialog,允許用戶選擇一個(gè)或多個(gè)文件或目錄字體對(duì)話框QFontDialog,允許用戶選擇、設(shè)置字體輸入對(duì)話框QInputDialog,允許用戶輸入文本信息頁(yè)設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁(yè)面設(shè)置進(jìn)度對(duì)話框QProgressDialog,指示出一項(xiàng)操作的工作進(jìn)度,而且提示用戶該操作是否停滯打印對(duì)話框QPrintDialog,配置打印機(jī)相關(guān)選項(xiàng)查找對(duì)話框示例通過(guò)一個(gè)簡(jiǎn)單的查找對(duì)話框的實(shí)現(xiàn)了解Qt中對(duì)話框的創(chuàng)建過(guò)程,布局管理,信號(hào)和槽機(jī)

14、制以及一些簡(jiǎn)單控件的使用查找對(duì)話框示例頭文件finddialog.h1 #ifndef FINDDIALOG_H 2 #define FINDDIALOG_H 3 #include 4 class QCheckBox; 5 class QLabel; 6 class QLineEdit; 7 class QPushButton; 8 class FindDialog : public QDialog 9 10 Q_OBJECT 11 public: 12 FindDialog(QWidget *parent = 0); 查找對(duì)話框示例13 signals: 14 void findNext(c

15、onst QString &str, Qt:CaseSensitivity cs); 15 void findPrevious(const QString &str, Qt:CaseSensitivity cs);16 private slots: 17 void findClicked(); 18 void enableFindButton(const QString &text); 19 private: 20 QLabel *label; 21 QLineEdit *lineEdit; 22 QCheckBox *caseCheckBox; 23 QCheckBox *backwardC

16、heckBox; 24 QPushButton *findButton; 25 QPushButton *closeButton; 26 ; 27 #endif 查找對(duì)話框示例12行FindDialog的構(gòu)造函數(shù)是典型的Qt窗口部件類(lèi)的定義方式。Parent參數(shù)指定了父窗口部件。該參數(shù)默認(rèn)值是一個(gè)空指針,意味著該對(duì)話框沒(méi)有父對(duì)象。13行開(kāi)始的signal部分聲明了當(dāng)用戶單擊Find按鈕時(shí)對(duì)話框發(fā)出的兩個(gè)信號(hào)。查找對(duì)話框示例1 #include 2 #include finddialog.h 3 FindDialog:FindDialog(QWidget *parent) 4 : QDialog

17、(parent) 5 6 label = new QLabel(tr(Find &what:); 7 lineEdit = new QLineEdit; 8 label-setBuddy(lineEdit); 9 caseCheckBox = new QCheckBox(tr(Match &case); 10 backwardCheckBox = new QCheckBox(tr(Search &backward); 11 findButton = new QPushButton(tr(&Find); 12 findButton-setDefault(true); 13 findButton-

18、setEnabled(false); 14 closeButton = new QPushButton(tr(Close); 查找對(duì)話框示例15 connect(lineEdit, SIGNAL(textChanged(const QString &), 16 this, SLOT(enableFindButton(const QString &); 17 connect(findButton, SIGNAL(clicked(), 18 this, SLOT(findClicked();19 connect(closeButton, SIGNAL(clicked(), 20 this, SLO

19、T(close(); 查找對(duì)話框示例通過(guò)connect函數(shù)實(shí)現(xiàn)了信號(hào)和槽的連接只要行編輯器中的文本發(fā)生變化,就會(huì)調(diào)用私有槽enableFindButton當(dāng)用戶單擊Find按鈕時(shí),會(huì)調(diào)用findClicked私有槽當(dāng)用戶單擊Close時(shí),對(duì)話框關(guān)閉查找對(duì)話框示例21 QHBoxLayout *topLeftLayout = new QHBoxLayout; 22 topLeftLayout-addWidget(label); 23 topLeftLayout-addWidget(lineEdit); 24 QVBoxLayout *leftLayout = new QVBoxLayout; 2

20、5 leftLayout-addLayout(topLeftLayout); 26 leftLayout-addWidget(caseCheckBox); 27 leftLayout-addWidget(backwardCheckBox); 28 QVBoxLayout *rightLayout = new QVBoxLayout; 29 rightLayout-addWidget(findButton); 30 rightLayout-addWidget(closeButton); 31 rightLayout-addStretch(); 32 QHBoxLayout *mainLayout

21、 = new QHBoxLayout; 33 mainLayout-addLayout(leftLayout); 34 mainLayout-addLayout(rightLayout); 35 setLayout(mainLayout); 36 setWindowTitle(tr(Find); 37 setFixedHeight(sizeHint().height(); 38 查找對(duì)話框示例Qt提供了布局管理器布局子窗口部件通過(guò)QHBoxLayout,QVBoxLayout和QGridLayout這三個(gè)布局的不同嵌套組合,就可以構(gòu)建出相當(dāng)復(fù)雜的對(duì)話框。查找對(duì)話框示例39 void FindD

22、ialog:findClicked() 40 41 QString text = lineEdit-text(); 42 Qt:CaseSensitivity cs = 43 caseCheckBox-isChecked() ? Qt:CaseSensitive :Qt:CaseInsensitive; 44 if (backwardCheckBox-isChecked() 45 emit findPrevious(text, cs); 46 else 47 emit findNext(text, cs); 48 49 50 void FindDialog:enableFindButton(c

23、onst QString &text) 51 52 findButton-setEnabled(!text.isEmpty(); 53 查找對(duì)話框示例以上兩個(gè)函數(shù)是對(duì)話框中用到的槽當(dāng)用戶單擊Find按鈕時(shí),就會(huì)調(diào)用findClicked槽。而該槽會(huì)發(fā)射findPrevious或findNext信號(hào),這取決于Search backward選項(xiàng)的取值只要用戶改變了行編輯器中的文本,就會(huì)調(diào)用enableFindButton槽。如果在行編輯器中有文本,該槽就會(huì)啟用Find按鈕,否則它會(huì)禁用Find按鈕查找對(duì)話框示例創(chuàng)建main.cpp文件測(cè)試FindDialog窗口部件1 #include 2 #in

24、clude finddialog.h 3 int main(int argc, char *argv) 4 5 QApplication app(argc, argv); 6 FindDialog *dialog = new FindDialog; 7 dialog-show(); 8 return app.exec(); 9 Qt主窗口介紹應(yīng)用程序的主窗口提供了用于構(gòu)建應(yīng)用程序用戶界面的框架主窗口一般包括菜單欄,工具欄,狀態(tài)欄,中央窗口部件等子控件在Qt中,通過(guò)子類(lèi)化QMainWindow可以創(chuàng)建一個(gè)應(yīng)用程序的主窗口Qt主窗口介紹Qt主窗口介紹下面通過(guò)一個(gè)簡(jiǎn)單的代碼分析了解Qt中主窗口的創(chuàng)建

25、過(guò)程實(shí)現(xiàn)主窗口的源代碼分別放在mainwindow.h和mainwindow.cpp中Qt主窗口介紹Mainwindow.hclass MainWindow : public QMainWindow Q_OBJECTpublic: MainWindow(QWidget *parent = 0); MainWindow();private slots: void newFile(); void openFile(); void cut(); void copy();private: void createActions(); void createMenus(); void createStat

26、usBar(); void createToolsBar();Qt主窗口介紹private: QMenu *fileMenu; QMenu *editMenu; QAction *newAction; QAction *openAction; QAction *cutAction; QAction *copyAction; QToolBar *fileToolBar; QToolBar *editToolBar;Qt主窗口介紹在頭文件中,將MainWindow類(lèi)定義為QMainWindow的子類(lèi)。像File-New這樣的菜單項(xiàng),在MainWindow中被實(shí)現(xiàn)為私有槽Qt主窗口介紹mainwin

27、dow.cppMainWindow:MainWindow(QWidget *parent) : QMainWindow(parent) createActions(); createMenus(); createToolsBar(); createStatusBar();MainWindow類(lèi)的構(gòu)造函數(shù),通過(guò)調(diào)用類(lèi)的私有函數(shù)createActions(); createMenus(); createToolsBar(); createStatusBar();分別創(chuàng)建主窗口的菜單欄,工具欄和狀態(tài)欄菜單欄和工具欄Qt通過(guò)動(dòng)作的概念簡(jiǎn)化了菜單和工具欄的編程一個(gè)動(dòng)作action就是一個(gè)可以添加到任意數(shù)

28、量的菜單和工具欄上的項(xiàng)創(chuàng)建菜單和工具欄一般包括如下步驟:創(chuàng)建并設(shè)置動(dòng)作創(chuàng)建菜單并把動(dòng)作添加到菜單上創(chuàng)建工具欄并把動(dòng)作添加到工具欄上菜單欄和工具欄創(chuàng)建動(dòng)作void MainWindow:createActions() /actions in fileMenu newAction = new QAction(tr(&New),this); connect(newAction,SIGNAL(triggered(),this,SLOT(newFile(); openAction = new QAction(tr(&Open),this); connect(openAction,SIGNAL(triggered(),this,SLOT(openFile(); /actions in editMenu cutAction = new QAc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論