自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深度解析 QT Creator 使用

移動(dòng)開發(fā)
本文介紹的是 QT Creator 使用,QT Creator,我們也接觸不少了,先來看 內(nèi)容。

QT Creator 使用是本文要介紹的內(nèi)容,先來看內(nèi)容。用***的Qt Creator選擇GUI的應(yīng)用會(huì)產(chǎn)生含有如下文件的工程

 QT Creator 使用

下面就簡單分析下各部分的功能。.pro文件是供qmake使用的文件,不是本文的重點(diǎn)【不過其實(shí)也很簡單的】,在此不多贅述。

所以呢,還是從main開始,

  1. #include <QtGui/QApplication>    
  2. #include "mainwindow.h"    
  3. int main(int argc, char *argv[])    
  4. {    
  5. QApplication a(argc, argv);    
  6. MainWindow w;    
  7. w.show();    
  8. return a.exec();    
  9. }   

很簡單的樣子

QApplication a(argc, argv)和a.exec()可以理解為載入了Qt的架構(gòu),跑Qt的程序都要有此部,就不多說了。其中調(diào)用了個(gè)MainWindow并把它show了出來,具體分析下

下面是mainwindow.h中的內(nèi)容

  1. #ifndef MAINWINDOW_H    
  2. #define MAINWINDOW_H    
  3. #include <QtGui/QMainWindow>    
  4. namespace Ui    
  5. {    
  6. class MainWindow;    
  7. }    
  8. class MainWindow : public QMainWindow    
  9. {    
  10. Q_OBJECT    
  11. public:    
  12. MainWindow(QWidget *parent = 0);    
  13. ~MainWindow();    
  14. private:    
  15. Ui::MainWindow *ui;    
  16. };    
  17. #endif // MAINWINDOW_H   

開始的namespace Ui可能讓人有點(diǎn)摸不著頭腦,這是因?yàn)閝t把ui相關(guān)的類單獨(dú)獨(dú)立了出來,但類名相同,禁用namespace區(qū)別【但是就目前的使用來說,感覺這樣做不怎么好,后面我會(huì)解釋原因】

聲明namespace Ui是因?yàn)橐{(diào)用Ui中的MainWindow,此MainWindow非彼MainWindow,后面涉及的*ui指針會(huì)調(diào)用它!

關(guān)于Q_OBJECT就不說了,Qt中與signal和slot相關(guān)的類都要這么聲明下。

仔細(xì)看出了構(gòu)造,析構(gòu)就沒啥了,只有那么個(gè)*ui!不過現(xiàn)在如果運(yùn)行下,也只會(huì)生成個(gè)窗體而已。

下面來看構(gòu)造函數(shù)和析構(gòu)函數(shù),其實(shí)也就是mainwindow.c

  1. #include "mainwindow.h"    
  2. #include "ui_mainwindow.h"    
  3. MainWindow::MainWindow(QWidget *parent)    
  4. : QMainWindow(parent), ui(new Ui::MainWindow)    
  5. {    
  6. ui->setupUi(this);    
  7. }    
  8. MainWindow::~MainWindow()    
  9. {    
  10. delete ui;    
  11. }   

構(gòu)造時(shí)在堆上new了個(gè)Ui域中的MainWindow,并調(diào)用setupUi,析構(gòu)僅僅是將其delete了,還是很簡單!

正如前面所述Qt很好的把ui分離了出去,前面圖中的那個(gè).ui文件就是讓QtDesigner使的布局用文件!

現(xiàn)在運(yùn)行下,會(huì)生成ui_mainwindow.h,這個(gè)里面會(huì)涉及到真正布局用的函數(shù),也就是那個(gè)Ui域中的MainWindow.下面具體看一下,

  1. #ifndef UI_MAINWINDOW_H    
  2. #define UI_MAINWINDOW_H    
  3. #include <QtCore/QVariant>    
  4. #include <QtGui/QAction>    
  5. #include <QtGui/QApplication>    
  6. #include <QtGui/QButtonGroup>    
  7. #include <QtGui/QHeaderView>    
  8. #include <QtGui/QMainWindow>    
  9. #include <QtGui/QMenuBar>    
  10. #include <QtGui/QStatusBar>    
  11. #include <QtGui/QToolBar>    
  12. #include <QtGui/QWidget>    
  13. QT_BEGIN_NAMESPACE    
  14. class Ui_MainWindow    
  15. {    
  16. public:    
  17. QMenuBar *menuBar;    
  18. QToolBar *mainToolBar;    
  19. QWidget *centralWidget;    
  20. QStatusBar *statusBar;    
  21. void setupUi(QMainWindow *MainWindow)    
  22. {    
  23. if (MainWindow->objectName().isEmpty())    
  24. MainWindow->setObjectName(QString::fromUtf8("MainWindow"));    
  25. MainWindow->resize(600, 400);    
  26. menuBar = new QMenuBar(MainWindow);    
  27. menuBar->setObjectName(QString::fromUtf8("menuBar"));    
  28. MainWindow->setMenuBar(menuBar);    
  29. mainToolBar = new QToolBar(MainWindow);    
  30. mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));    
  31. MainWindow->addToolBar(mainToolBar);    
  32. centralWidget = new QWidget(MainWindow);    
  33. centralWidget->setObjectName(QString::fromUtf8("centralWidget"));    
  34. MainWindow->setCentralWidget(centralWidget);    
  35. statusBar = new QStatusBar(MainWindow);    
  36. statusBar->setObjectName(QString::fromUtf8("statusBar"));    
  37. MainWindow->setStatusBar(statusBar);    
  38. retranslateUi(MainWindow);    
  39. QMetaObject::connectSlotsByName(MainWindow);    
  40. } // setupUi    
  41. void retranslateUi(QMainWindow *MainWindow)    
  42. {    
  43. MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));    
  44. Q_UNUSED(MainWindow);    
  45. } // retranslateUi    
  46. };    
  47. namespace Ui {    
  48. class MainWindow: public Ui_MainWindow {};    
  49. } // namespace Ui    
  50. QT_END_NAMESPACE    
  51. #endif // UI_MAINWINDOW_H   

吼吼,一下子多了不少,但其實(shí)還是很容易的。Ui_MainWindow聲明了幾個(gè)構(gòu)件,具體我就不說了,因?yàn)橐矝]啥可說的,它實(shí)現(xiàn)了setupUi函式,也就是前面那個(gè)MainWindow中調(diào)用的setupUi。

但是要說明的是QMetaObject::connectSlotsByName函式會(huì)自動(dòng)連接相應(yīng)名稱的信號與槽,但要注意它連接的是傳入的MainWindow及其子構(gòu)件【不是子類】,注意前邊ui->setupUi(this)中傳入的this,也就是非ui域中的MainWindow,所以如果要聲明signal和slot時(shí)還是要在非ui域的MainWindow中來聲明,然后通過ui->xxx的形式來與GUI產(chǎn)生交互!如果我們在QtDesiner中拖放一個(gè)按鈕然后點(diǎn)擊go to slot就很容易印證這一點(diǎn)。

retranslateUi則會(huì)為ui中的構(gòu)件命名,具體也不在此多說。

***還是看看這段代碼

  1. namespace Ui {  
  2. class MainWindow: public Ui_MainWindow {};  
  3. } // namespace Ui 

前面非Ui域中的MainWindow的*ui指向的是Ui域中的MainWindow,而Ui域中的MainWindow出了繼承了Ui_MainWindow之外,內(nèi)部一貧如洗!【有點(diǎn)繞口了】

來張圖片,再復(fù)習(xí)下

 QT Creator 使用

***要說明的有兩點(diǎn),個(gè)人感覺是QtCreator的BUG,

其一是如果自己定制控件,并且想在內(nèi)置的designer中載入,win下用mingw是不可行的,因?yàn)閟dk套件中的designer是用微軟的編譯器編譯的,當(dāng)然也有個(gè)比較方便的解決的辦法,就是把qtcreator的源碼下來,用現(xiàn)有的creator再編譯一遍,然后覆蓋過去就行了。

其二也是前面提到的,兩個(gè)同名的MainWindow僅用Ui域來區(qū)分,雖然感覺這樣做從設(shè)計(jì)上來說是很美的,但調(diào)試時(shí)卻會(huì)有些許的問題,總之在creator中調(diào)試不能識(shí)別正確的域,具體見下圖例

 QT Creator 使用

像上面這張圖this實(shí)際上應(yīng)該指向的是非Ui域中的MainWindow【this其實(shí)指向的是MainWindow,它并不知是哪個(gè)域的MainWindow,再往下展開就錯(cuò)誤的指向了Ui域】,但調(diào)試的數(shù)據(jù)區(qū)指向了Ui域中的MainWindow,當(dāng)然也不是沒有解決的辦法,你可以手工將Ui域中的MainWindow改下名就可以獲得正確的調(diào)試信息了,只是這樣做稍顯麻煩,而且再度運(yùn)行qmake后可能還要重新修改。

轉(zhuǎn)自: http://blog.csdn.net/pingf0/archive/2009/09/19/4571443.aspx

小結(jié): QT Creator 使用的內(nèi)容介紹完了,希望本文能夠?qū)δ阌袔椭?,更多?nèi)容請參考編輯推薦!先來介紹幾篇文章,你應(yīng)該很有興趣。

http://mobile.51cto.com/symbian-268176.htm       qt網(wǎng)絡(luò)
http://mobile.51cto.com/symbian-268170.htm       http 編程
http://mobile.51cto.com/symbian-268167_1.htm   獲取網(wǎng)絡(luò)地址

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-30 16:53:18

QT Creator TableWidge

2011-06-21 17:45:27

Qt Creator

2011-06-10 09:09:38

Qt Creator OpenCV

2011-07-01 14:39:08

Qt Quick

2011-06-09 14:56:53

QT 編譯

2014-07-21 08:53:16

Qt Creator

2011-06-29 10:46:01

Qt Eembedded Linux

2011-06-16 15:17:16

2011-06-22 16:50:09

Qt 進(jìn)程 通信機(jī)制

2011-06-21 18:02:14

Qt 動(dòng)態(tài) 鏈接庫

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2011-06-21 14:01:07

QT 界面庫 Embedded

2011-06-15 13:20:56

QT Creator 升級

2011-06-10 09:29:36

Qt Creator 布局管理器

2011-07-04 10:09:19

Qt Creator BUG

2011-06-29 14:56:28

Qt Creator 快捷捷

2011-06-20 14:18:27

Qt 資源 文件

2011-03-18 20:13:01

QtUbuntu

2011-06-09 10:28:54

QT 嵌入式

2011-06-21 15:48:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號