• <del id="a8uas"></del>
    • 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      400-811-9990
      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

      上海
      • 北京
      • 鄭州
      • 武漢
      • 成都
      • 西安
      • 沈陽
      • 廣州
      • 南京
      • 深圳
      • 大連
      • 青島
      • 杭州
      • 重慶
      當(dāng)前位置:合肥千鋒IT培訓(xùn)  >  技術(shù)干貨  >  QT使用教程之程序編寫

      QT使用教程之程序編寫

      來源:千鋒教育
      發(fā)布人:qyf
      時(shí)間: 2023-02-13 17:08:28

        1 最簡(jiǎn)單的Qt小程序

        #include "widget.h"#include

        int main(int argc, char *argv[]){

        QApplication a(argc, argv);

        Widget w;

        w.show();

        return a.exec();

        }

        解釋:

        1、Qt系統(tǒng)提供的標(biāo)準(zhǔn)類名聲明頭文件沒有.h后綴 2、Qt一個(gè)類對(duì)應(yīng)一個(gè)頭文件,類名就是頭文件名 3、QApplication應(yīng)用程序類 3.1管理圖形用戶界面應(yīng)用程序的控制流和主要設(shè)置。 3.2是Qt的整個(gè)后臺(tái)管理的命脈它包含主事件循環(huán),在其中來自窗口系統(tǒng)和其它資源的所有事件處理和調(diào)度。它也處理應(yīng)用程序的初始化和結(jié)束,并且提供對(duì)話管理。 3.2對(duì)于任何一個(gè)使用Qt的圖形用戶界面應(yīng)用程序,都正好存在一個(gè)QApplication 對(duì)象,而不論這個(gè)應(yīng)用程序在同一時(shí)間內(nèi)是不是有0、1、2或更多個(gè)窗口。 4a.exec() 程序進(jìn)入消息循環(huán),等待對(duì)用戶輸入進(jìn)行響應(yīng)。這里main()把控制權(quán)轉(zhuǎn)交給Qt,Qt完成事件處理工作,當(dāng)應(yīng)用程序退出的時(shí)候exec()的值就會(huì)返回。在exec()中,Qt接受并處理用戶和系統(tǒng)的事件并且把它們傳遞給適當(dāng)?shù)拇翱诓考?/p>

        2窗口屬性修改

        2.1確定代碼書寫位置

        .pro:用于生成可執(zhí)行文件

        main.cpp:主函數(shù)

        widget.cpp:類的函數(shù)

        一般情況,窗口的屬性和添加控件和對(duì)控件的操作都會(huì)在類的構(gòu)造函數(shù)中書寫。

        優(yōu)點(diǎn):可以讓主程序中無多余的代碼,程序閱讀也方便。

        widget.h:類和頭文件

        2.2確定使用哪些函數(shù)

        1、幫助手冊(cè)在哪:

      圖片 1

      圖片 2

        2、幫助手冊(cè)怎么看

        索引---》對(duì)應(yīng)的類

        類的說明(類的頭文件,組件、基類、派生類)

      圖片 3

        類的內(nèi)容(函數(shù))

      圖片 4

        注意:如果函數(shù)在類中未找到,可去其基類中查找。

        2.3設(shè)置窗口屬性

        //修改窗口的標(biāo)題(第一個(gè)窗口)

        this->setWindowTitle("第一個(gè)窗口");

        //設(shè)置窗口的大小,設(shè)置完成可以拉伸

        this->resize(600,400);

        //設(shè)置固定大小,設(shè)置完成不可拉伸 this->setFixedSize(500,500);

        2.4如果Qt中文亂碼解決:(注意:改完之后,新建工程亂碼解決)

      圖片 5

        3按鈕的創(chuàng)建

        在Qt程序中,最常用的控件之一就是按鈕了,首先我們來看下如何創(chuàng)建一個(gè)按鈕,兩種創(chuàng)建方式如下:

        頭文件:

        #include

        第一種:

        QPushButton * btn = new QPushButton;

        //設(shè)置父親

        btn->setParent(this);

        //設(shè)置文字

        btn->setText("德瑪西亞");

        //移動(dòng)位置

        btn->move(100,100);

        第二種:

        QPushButton * btn2 = new QPushButton("孫悟空",this);

        //重新指定窗口大小

        this->resize(600,400);

        設(shè)置窗口標(biāo)題:

        this->setWindowTitle("第一個(gè)項(xiàng)目");

        //限制窗口大小

        this->setFixedSize(600,400);

        上面代碼中,一個(gè)按鈕其實(shí)就是一個(gè)QPushButton類下的對(duì)象,如果只是創(chuàng)建出對(duì)象,是無法顯示到窗口中的,所以我們需要依賴一個(gè)父窗口,也就是指定一個(gè)父親利用setParent函數(shù)即可,如果想設(shè)置按鈕上顯示的文字利用setText,移動(dòng)按鈕位置用move

        對(duì)于窗口而言,我們可以修改左上角窗口的標(biāo)題setWindowTitle,重新指定窗口大小:resize,或者設(shè)置固定的窗口大小setFixedSize;

      圖片 6

        4對(duì)象模型(對(duì)象樹)

        在Qt中創(chuàng)建對(duì)象的時(shí)候會(huì)提供一個(gè)Parent對(duì)象指針,下面來解釋這個(gè)parent到底是干什么的。

        1、QObject是以對(duì)象樹的形式組織起來的。 2、當(dāng)你創(chuàng)建一個(gè)QObject對(duì)象時(shí),會(huì)看到QObject的構(gòu)造函數(shù)接收一個(gè)QObject指針作為參數(shù),這個(gè)參數(shù)就是 parent,也就是父對(duì)象指針。 這相當(dāng)于,在創(chuàng)建QObject對(duì)象時(shí),可以提供一個(gè)其父對(duì)象,我們創(chuàng)建的這個(gè)QObject對(duì)象會(huì)自動(dòng)添加到其父對(duì)象的children()列表。 3、當(dāng)父對(duì)象析構(gòu)的時(shí)候,這個(gè)列表中的所有對(duì)象也會(huì)被析構(gòu)。(注意,這里的父對(duì)象并不是繼承意義上的父類!) 這種機(jī)制在 GUI 程序設(shè)計(jì)中相當(dāng)有用。例如,一個(gè)按鈕有一個(gè)QShortcut(快捷鍵)對(duì)象作為其子對(duì)象。當(dāng)我們刪除按鈕的時(shí)候,這個(gè)快捷鍵理應(yīng)被刪除。這是合理的。 4、QWidget是能夠在屏幕上顯示的一切組件的父類。 5、QWidget繼承自QObject,因此也繼承了這種對(duì)象樹關(guān)系。一個(gè)孩子自動(dòng)地成為父組件的一個(gè)子組件。因此,它會(huì)顯示在父組件的坐標(biāo)系統(tǒng)中,被父組件的邊界剪裁。例如,當(dāng)用戶關(guān)閉一個(gè)對(duì)話框的時(shí)候,應(yīng)用程序?qū)⑵鋭h除,那么,我們希望屬于這個(gè)對(duì)話框的按鈕、圖標(biāo)等應(yīng)該一起被刪除。事實(shí)就是如此,因?yàn)檫@些都是對(duì)話框的子組件。 6、當(dāng)然,我們也可以自己刪除子對(duì)象,它們會(huì)自動(dòng)從其父對(duì)象列表中刪除。比如,當(dāng)我們刪除了一個(gè)工具欄時(shí),其所在的主窗口會(huì)自動(dòng)將該工具欄從其子對(duì)象列表中刪除,并且自動(dòng)調(diào)整屏幕顯示。

        Qt 引入對(duì)象樹的概念,在一定程度上解決了內(nèi)存問題。

        1、當(dāng)一個(gè)QObject對(duì)象在堆上創(chuàng)建的時(shí)候,Qt 會(huì)同時(shí)為其創(chuàng)建一個(gè)對(duì)象樹。不過,對(duì)象樹中對(duì)象的順序是沒有定義的。這意味著,銷毀這些對(duì)象的順序也是未定義的。 2、任何對(duì)象樹中的 QObject對(duì)象 delete 的時(shí)候,如果這個(gè)對(duì)象有 parent,則自動(dòng)將其從 parent 的children()列表中刪除;如果有孩子,則自動(dòng) delete 每一個(gè)孩子。Qt 保證沒有QObject會(huì)被 delete 兩次,這是由析構(gòu)順序決定的。

        如果QObject在棧上創(chuàng)建,Qt 保持同樣的行為。正常情況下,這也不會(huì)發(fā)生什么問題。來看下下面的代碼片段:

        {

        QWidget window;

        QPushButton quit("Quit", &window);}

        作為父組件的 window 和作為子組件的 quit 都是QObject的子類(事實(shí)上,它們都是QWidget的子類,而QWidget是QObject的子類)。這段代碼是正確的,quit 的析構(gòu)函數(shù)不會(huì)被調(diào)用兩次,因?yàn)闃?biāo)準(zhǔn) C++要求,局部對(duì)象的析構(gòu)順序應(yīng)該按照其創(chuàng)建順序的相反過程。因此,這段代碼在超出作用域時(shí),會(huì)先調(diào)用 quit 的析構(gòu)函數(shù),將其從父對(duì)象 window 的子對(duì)象列表中刪除,然后才會(huì)再調(diào)用 window 的析構(gòu)函數(shù)。

        但是,如果我們使用下面的代碼:

        {

        QPushButton quit("Quit");

        QWidget window;

        quit.setParent(&window);}

        情況又有所不同,析構(gòu)順序就有了問題。我們看到,在上面的代碼中,作為父對(duì)象的 window 會(huì)首先被析構(gòu),因?yàn)樗亲詈笠粋€(gè)創(chuàng)建的對(duì)象。在析構(gòu)過程中,它會(huì)調(diào)用子對(duì)象列表中每一個(gè)對(duì)象的析構(gòu)函數(shù),也就是說, quit 此時(shí)就被析構(gòu)了。然后,代碼繼續(xù)執(zhí)行,在 window 析構(gòu)之后,quit 也會(huì)被析構(gòu),因?yàn)?quit 也是一個(gè)局部變量,在超出作用域的時(shí)候當(dāng)然也需要析構(gòu)。但是,這時(shí)候已經(jīng)是第二次調(diào)用 quit 的析構(gòu)函數(shù)了,C++ 不允許調(diào)用兩次析構(gòu)函數(shù),因此,程序崩潰了。

        由此我們看到,Qt 的對(duì)象樹機(jī)制雖然幫助我們?cè)谝欢ǔ潭壬辖鉀Q了內(nèi)存問題,但是也引入了一些值得注意的事情。這些細(xì)節(jié)在今后的開發(fā)過程中很可能時(shí)不時(shí)跳出來煩擾一下,所以,我們最好從開始就養(yǎng)成良好習(xí)慣,在 Qt 中,盡量在構(gòu)造的時(shí)候就指定 parent 對(duì)象,并且大膽在堆上創(chuàng)建。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

      猜你喜歡LIKE

      unity快捷鍵大全

      2023-08-28

      unity射線檢測(cè)多個(gè)物體

      2023-08-28

      unity富文本字體大小

      2023-08-28

      最新文章NEW

      unity性能優(yōu)化指標(biāo)

      2023-08-28

      unity開發(fā)常用框架

      2023-08-28

      unity玻璃材質(zhì)球

      2023-08-28

      相關(guān)推薦HOT

      更多>>

      快速通道 更多>>

      最新開班信息 更多>>

      網(wǎng)友熱搜 更多>>