欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:mfc 【QT】QT入門(mén)

柚子快報(bào)邀請(qǐng)碼778899分享:mfc 【QT】QT入門(mén)

http://yzkb.51969.com/

個(gè)人主頁(yè)~

QT入門(mén)

一、簡(jiǎn)述QT1、什么是QT2、QT的優(yōu)勢(shì)3、應(yīng)用場(chǎng)景

二、QT的基本使用1、新建項(xiàng)目(1)選擇項(xiàng)目模版(2)選擇項(xiàng)目路徑(3)選擇構(gòu)建系統(tǒng)(4)填寫(xiě)類(lèi)信息設(shè)置界面(5)選擇語(yǔ)言和翻譯軟件(6)選擇QT套件(7)選擇版本控制系統(tǒng)(8)創(chuàng)建完畢

二、QT的Hello World1、使用按鈕實(shí)現(xiàn)(1)純代碼方式實(shí)現(xiàn)(2)可視化操作實(shí)現(xiàn)

2、使用標(biāo)簽實(shí)現(xiàn)(1)純代碼方式實(shí)現(xiàn)(2)可視化操作實(shí)現(xiàn)

三、對(duì)象樹(shù)驗(yàn)證mypushbutton.hmypushbutton.cppwidget.cpp

四、QT窗口坐標(biāo)體系

一、簡(jiǎn)述QT

1、什么是QT

QT是一個(gè)跨平臺(tái)的C++開(kāi)發(fā)框架,主要用于開(kāi)發(fā)圖形用戶界面應(yīng)用程序,但同樣支持開(kāi)發(fā)不帶界面的命令行程序

這里的圖形用戶界面是一種人與計(jì)算機(jī)通信的界面顯示格式,允許用戶通過(guò)圖形化的操作元素(如窗口、圖標(biāo)、按鈕、菜單等)與計(jì)算機(jī)進(jìn)行交互,而無(wú)需編寫(xiě)程序代碼,圖形用戶界面的主要目的是使得用戶能夠更加直觀、便捷地操作計(jì)算機(jī),提高用戶體驗(yàn),也就是專(zhuān)門(mén)提供給非程序員的用戶使用,因?yàn)椴⒉皇撬械挠脩舳紩?huì)編寫(xiě)代碼

2、QT的優(yōu)勢(shì)

跨平臺(tái)性:廣泛支持幾乎所有主流的操作系統(tǒng)

簡(jiǎn)單易用性:接口簡(jiǎn)單,容易上手

高效性:代碼執(zhí)行效率高,可維護(hù)性和擴(kuò)展性好

發(fā)展性:有龐大的開(kāi)源社區(qū),市場(chǎng)份額在上升

它在一定程度上簡(jiǎn)化了內(nèi)存回收的機(jī)制,并且可以進(jìn)行嵌入式開(kāi)發(fā)

3、應(yīng)用場(chǎng)景

QT廣泛應(yīng)用于桌面應(yīng)用程序,移動(dòng)應(yīng)用程序,嵌入式系統(tǒng)

我們熟知的WPS office 就是QT開(kāi)發(fā)的

二、QT的基本使用

前面安裝啥的就不再多說(shuō)了

1、新建項(xiàng)目

(1)選擇項(xiàng)目模版

新建項(xiàng)目對(duì)話框里一共有五類(lèi)模版

項(xiàng)目模版說(shuō)明ApplicationQT應(yīng)用程序,包括普通窗體程序和QtQuick程序Library可以創(chuàng)建動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)以及QtQuick擴(kuò)展插件、QtCreator自身插件其他項(xiàng)目可以創(chuàng)建單元測(cè)試項(xiàng)目、Qt4設(shè)計(jì)師自定義控件、子目錄項(xiàng)目等Non-Qt-Project非QT項(xiàng)目,可以創(chuàng)建純C/C++項(xiàng)目Import Project導(dǎo)入項(xiàng)目,從版本控制管理系統(tǒng)的軟件項(xiàng)目導(dǎo)入舊的項(xiàng)目

這里我們常用的只有第一種,然后右邊會(huì)出現(xiàn)四類(lèi)子模版 Qt Widgets Application:普通窗體模板,傳統(tǒng)基于部件的窗體界面程序

Qt Console Application:Qt 控制臺(tái)應(yīng)用程序,因?yàn)?Qt 主要用于圖形界面設(shè)計(jì),這個(gè)控制臺(tái)項(xiàng)目模板基本不用

Qt for Python:在Python下用 LGPL 的許可來(lái)開(kāi)發(fā)閉源 Qt 軟件

Qt Quick Application: Qt 提供的?種高級(jí)用戶界面技術(shù),使用它可以方便快速的為移動(dòng)以及嵌入式設(shè)備開(kāi)發(fā)流暢美觀的用戶界面,Qt Quick 模塊是開(kāi)發(fā) QML 應(yīng)用的標(biāo)準(zhǔn)庫(kù),提供了使用 QML 創(chuàng)建用戶界面所需的一切,包括可視化、交互、動(dòng)畫(huà)、模型、視圖、粒子效果以及著色效果等

(2)選擇項(xiàng)目路徑

就是選擇文件保存的位置,注意這個(gè)位置一定要全英文

(3)選擇構(gòu)建系統(tǒng)

qmake:是一個(gè)構(gòu)建工具,用于自動(dòng)生成makefile文件,支持跨平臺(tái)構(gòu)建,qmake編輯的是一個(gè)后綴為.pro的文件

CMake:是一個(gè)跨平臺(tái)的構(gòu)建工具,本身不是一個(gè)編譯器,而是一個(gè)能夠生成讓編譯器讀懂編譯流程的文件工具

Qbs:已經(jīng)被Qt官方棄用了,不再維護(hù),所以沒(méi)必要多說(shuō)了

(4)填寫(xiě)類(lèi)信息設(shè)置界面

上面的紅框是基類(lèi)的選擇,目前有三種基類(lèi)

基類(lèi)說(shuō)明QMainWindow主窗口類(lèi),一般用于較為復(fù)雜的應(yīng)用程序,除了中央客戶區(qū)界面,還包括菜單欄、工具欄、狀態(tài)欄、以及多個(gè)可??康墓ぞ邔?duì)話框等QWidget最簡(jiǎn)單最基本的窗體程序,里面可以放置多個(gè)控件實(shí)現(xiàn)程序功能QDialog基于對(duì)話框的程序,對(duì)話框一般用于彈窗,也可以用于主界面顯示,對(duì)話框是從QWidget繼承而來(lái)的,并豐富了一些功能,如模態(tài)顯示和返回值等

它們的關(guān)系就是:QWidget是QMainWindow和QDialog的父類(lèi)

(5)選擇語(yǔ)言和翻譯軟件

這個(gè)用不到,當(dāng)我們的水平走向國(guó)際化了,就可以用了

(6)選擇QT套件

把安裝包的所有東西都下上,直接都選上就行了

(7)選擇版本控制系統(tǒng)

藍(lán)框就是如果有GIT倉(cāng)庫(kù)(gitee或者github)就可以選擇直接傳到倉(cāng)庫(kù)中,如果沒(méi)有或者不想傳就選擇None

紅框中是自動(dòng)生成的文件

(8)創(chuàng)建完畢

其實(shí)QT程序的編寫(xiě)窗口是很明了的,感覺(jué)跟VS的布局也差不了多少

二、QT的Hello World

既然我們會(huì)創(chuàng)建文件了,那么我們就應(yīng)該動(dòng)手寫(xiě)第一個(gè)QT程序了,和C語(yǔ)言一樣,這里我們來(lái)寫(xiě)一個(gè)Hello World程序

1、使用按鈕實(shí)現(xiàn)

(1)純代碼方式實(shí)現(xiàn)

#include "widget.h"

#include

Widget::Widget(QWidget *parent)

: QWidget(parent)

{

QPushButton* button = new QPushButton;

button->setText("Hello World");

button->setParent(this);

}

Widget::~Widget()

{

}

先包含按鈕的頭文件,然后構(gòu)建一個(gè)指針,對(duì)指針進(jìn)行操作,setText是設(shè)置文本,setParent是將按鈕掛載到對(duì)象樹(shù)上,對(duì)象樹(shù)也是一種樹(shù)形結(jié)構(gòu),通過(guò)對(duì)象樹(shù)我們可以對(duì)樹(shù)上的對(duì)象進(jìn)行統(tǒng)一的析構(gòu),掛載在對(duì)象樹(shù)上的內(nèi)容才能被窗口顯示

按鈕默認(rèn)在窗口左上角

(2)可視化操作實(shí)現(xiàn)

雙擊打開(kāi)widget.ui文件,將Push Button拖到界面上,雙擊更改內(nèi)容

這就是QT編譯器自動(dòng)生成的代碼,我們通過(guò)自己編寫(xiě)的純代碼方式實(shí)現(xiàn)也會(huì)被解析成類(lèi)似的代碼

2、使用標(biāo)簽實(shí)現(xiàn)

跟上面差不多,不多說(shuō)了

(1)純代碼方式實(shí)現(xiàn)

#include "widget.h"

#include

Widget::Widget(QWidget *parent)

: QWidget(parent)

{

QLabel* q = new QLabel;

q->setText("Hello World");

q->setParent(this);

}

Widget::~Widget()

{

}

(2)可視化操作實(shí)現(xiàn)

三、對(duì)象樹(shù)

在QT中創(chuàng)建很多對(duì)象的時(shí)候會(huì)提供一個(gè)Parent對(duì)象指針,QObject是以對(duì)象樹(shù)的形式組織起來(lái)的,,當(dāng)創(chuàng)建一個(gè)QObject對(duì)象時(shí),會(huì)看到QObject的構(gòu)造函數(shù)接收一個(gè)QObject指針作為參數(shù),這個(gè)參數(shù)就是parent,也就是父類(lèi)指針 在創(chuàng)建QObject對(duì)象時(shí),可以提供一個(gè)其父對(duì)象,我們創(chuàng)建的這個(gè)QObject對(duì)象會(huì)自動(dòng)添加到其父對(duì)象的children列表 當(dāng)父對(duì)象析構(gòu)的時(shí)候,這個(gè)列表中的所有對(duì)象也會(huì)被析構(gòu)(不是繼承意義上的父對(duì)象,而是樹(shù)意義上的父對(duì)象)

QWidget是能夠在屏幕上顯示的一切組件的父類(lèi) QWidget繼承自QObject,因此也集成了這種對(duì)象樹(shù)關(guān)系,一個(gè)孩子自動(dòng)地成為父組件的一個(gè)子組件 當(dāng)我們刪除子對(duì)象時(shí),包括它的子對(duì)象們會(huì)自動(dòng)從其父對(duì)象列表中刪除

QT引入對(duì)象樹(shù)的概念在一定程度上解決了內(nèi)存問(wèn)題 當(dāng)一個(gè)QObject對(duì)象在堆上創(chuàng)建的時(shí)候,QT會(huì)同時(shí)為其創(chuàng)建一個(gè)對(duì)象樹(shù),不過(guò)對(duì)象樹(shù)種對(duì)象的順序是沒(méi)有定義的,任何QObject對(duì)象delete的時(shí)候,如果這個(gè)對(duì)象有parent則自動(dòng)將其從parent的children列表中刪除,如果有孩子,則自動(dòng)delete每一個(gè)孩子,可以保證沒(méi)有QObject會(huì)被delete兩次

QObject要在堆上創(chuàng)建,且不說(shuō)棧上的空間小,局部對(duì)象的析構(gòu)順序是按照其創(chuàng)建順序的相反過(guò)程,但如果子對(duì)象先創(chuàng)建,父對(duì)象后創(chuàng)建呢,先析構(gòu)父對(duì)象再析構(gòu)子對(duì)象會(huì)造成兩次析構(gòu)函數(shù) 并且在構(gòu)造的時(shí)候就要指定parent對(duì)象

驗(yàn)證

在Hello World處右鍵選擇AddNew,選擇C++文件,在藍(lán)框中輸入自定義類(lèi)名以及該自定義類(lèi)的父類(lèi)是哪個(gè)類(lèi),紅框是自動(dòng)勾選的,不用動(dòng),下面黑框的一般也不用動(dòng),上面是自己修改的類(lèi)所包含的頭文件,中間是自己創(chuàng)建的類(lèi)的源文件,可以修改最底下的路徑

然后點(diǎn)下一步然后點(diǎn)完成就行,手動(dòng)創(chuàng)建的類(lèi)會(huì)自動(dòng)添加到目標(biāo)工程中,然后將自定義的類(lèi)完善修改一下

mypushbutton.h

#ifndef MYPUSHBUTTON_H

#define MYPUSHBUTTON_H

//#include

#include

class MyPushButton : public QPushButton

{

Q_OBJECT

public:

explicit MyPushButton(QWidget *parent = nullptr);

~MyPushButton();

signals:

public slots:

};

#endif // MYPUSHBUTTON_H

mypushbutton.cpp

#include "mypushbutton.h"

#include

MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)

{

qDebug() << "按鈕構(gòu)造函數(shù)調(diào)用";

}

MyPushButton::~MyPushButton()

{

qDebug() << "按鈕析構(gòu)函數(shù)被調(diào)用";

}

widget.cpp

#include "widget.h"

#include "ui_widget.h"

#include "mypushbutton.h"

#include

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

MyPushButton* b = new MyPushButton;

b->setText("我的按鈕");

b->setParent(this);

}

Widget::~Widget()

{

qDebug() << "Widget析構(gòu)函數(shù)調(diào)用";

}

這里使用qDebug的原因是cout打印是GBK,而控制臺(tái)是按照UTF-8來(lái)解析的,正好qDebug也是按照UTF-8來(lái)解析的,所以我們就用qDebug了

執(zhí)行結(jié)果反映出對(duì)象樹(shù)確保先釋放子節(jié)點(diǎn)內(nèi)存,后釋放父節(jié)點(diǎn)內(nèi)存 而析構(gòu)函數(shù)的調(diào)用順序則不一定遵守上述要求,因此看到子節(jié)點(diǎn)的析構(gòu)執(zhí)行在父節(jié)點(diǎn)之后(不能簡(jiǎn)單的認(rèn)為調(diào)用析構(gòu)函數(shù)就是釋放內(nèi)存)

你想想這樣如果是放在棧上那不直接炸肛了嗎

四、QT窗口坐標(biāo)體系

左上角為原點(diǎn),往右為x軸,往下為y軸

對(duì)于嵌套窗口來(lái)說(shuō),這個(gè)坐標(biāo)是對(duì)于父窗口的,也就是父窗口的左上角是原點(diǎn)

通過(guò)move函數(shù)可以移動(dòng)控件

今日分享就到這里了~

柚子快報(bào)邀請(qǐng)碼778899分享:mfc 【QT】QT入門(mén)

http://yzkb.51969.com/

好文閱讀

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19535804.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄