目錄
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)建站為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計制作,服務(wù)好的網(wǎng)站設(shè)計公司,成都網(wǎng)站設(shè)計、做網(wǎng)站負責任的成都網(wǎng)站制作公司!一、設(shè)計師 Designer(掌握)
二、布局 Layout
2.1 布局的基本使用(掌握)
2.2 布局屬性(掌握)
2.3 伸展器(掌握)
2.4 嵌套(掌握)
2.5 伸展與策略(了解)
2.6 代碼布局(了解)
三、Designer連接信號槽(了解)
四、ui指針(掌握)
五、基本組件(掌握)
5.1 QWidget常用屬性
5.2 標簽 QLabel
5.3 按鈕類
5.3.1 按鈕類基本使用
5.3.2 按鈕組 QButtonGroup
5.4 單行文本輸入框 QQLineEdit
5.5 一組類似的組件
5.6 組合框 QComboBox
目錄
一、設(shè)計師 Designer(掌握)
二、布局 Layout
2.1 布局的基本使用(掌握)
2.2 布局屬性(掌握)
2.3 伸展器(掌握)
2.4 嵌套(掌握)
2.5 伸展與策略(了解)
2.6 代碼布局(了解)
三、Designer連接信號槽(了解)
四、ui指針(掌握)
五、基本組件(掌握)
5.1 QWidget常用屬性
5.2 標簽 QLabel
5.3 按鈕類
5.3.1 按鈕類基本使用
5.3.2 按鈕組 QButtonGroup
5.4 單行文本輸入框 QQLineEdit
5.5 一組類似的組件
5.6 組合框 QComboBox
一、QString類(掌握)
二、容器類(掌握)
2.1 QList
2.2 QMap
三、Qt數(shù)據(jù)類型(熟悉)
3.1 Qt統(tǒng)一數(shù)據(jù)類型
3.2 Qt的通用數(shù)據(jù)類型QVariant
四、時間與日期(熟悉)
4.1 時間戳
4.2 格式化
4.3 相關(guān)UI組件
五、定時器 QTimer(掌握)
Designer是一款用于設(shè)計Qt界面的程序,它生成的文件是.ui界面文件。
Designer程序可以獨立啟動,但是通常我們使用的是Qt Creator中內(nèi)置的Designer程序,要使用內(nèi)置的Designer程序,需要創(chuàng)建的Qt項目中包含.ui文件,因此創(chuàng)建一個帶界面文件的Qt項目來使用Designer程序。
在Qt Creator中雙擊打開.ui文件,即可啟動內(nèi)置的Designer程序。
Designer程序的各個面板介紹如下:
二、布局 Layout 2.1 布局的基本使用(掌握)可以把布局想象成一個“透明的盒子”,若干組件對象放置到“透明盒子”中,這些組件會按照“盒子”預(yù)設(shè)的規(guī)則自動排布。
本次講解三種布局
:
真正的類名叫QVBoxLayout
真正的類名叫QHBoxLayout,與垂直布局相比,只有方向不同。
真正的類名叫QGridLayout
2.2 布局屬性(掌握)垂直布局與水平布局屬性相同:
2.3 伸展器(掌握)當布局需要填充空間的時候需要一個輔助的組件:
伸展器,分為橫向和豎向的。
2.4 嵌套(掌握)布局可以嵌套,內(nèi)層布局相當于外層布局的一個組件。
2.5 伸展與策略(了解)QPushButton在垂直布局和水平布局中按照伸展比例設(shè)置時,表現(xiàn)出現(xiàn)象不同,原因是QPushButton組件中有一個sizePolicy屬性控制的。
Minimum表示當縮小為最小時,不會繼續(xù)縮小,但是可以放大。
Fixed表示大小不變。
除此之外,還有一些可選項,例如Maximum表示當放大到大時,不再繼續(xù)變大,但是可以縮小、Prefered(近似Expanding)縮小放大不受限制。
建議不要隨意修改組件默認的策略,也就是說此屬性適用于所有QWidget的派生類。
2.6 代碼布局(了解)除了上面使用Designer進行布局外,也可以通過C++代碼進行布局。
需要新建一個不帶ui界面文件的Qt項目。
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include// 頭文件
#include#includeclass Dialog : public QDialog
{Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QVBoxLayout* layout; // 布局對象
QPushButton* btn1;
QPushButton* btn2;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{resize(300,300);
btn1 = new QPushButton("按鈕1",this);
btn2 = new QPushButton("按鈕2",this);
// 創(chuàng)建布局對象
layout = new QVBoxLayout(this);
// 添加組件到布局中
layout->addWidget(btn1);
layout->addWidget(btn2);
}
Dialog::~Dialog()
{delete layout;
delete btn1;
delete btn2;
}
從此往后,創(chuàng)建項目,再也不取消創(chuàng)建界面選項了,即后續(xù)的學(xué)習都使用ui界面文件。
三、Designer連接信號槽(了解)Designer也可以連接信號槽,但是僅限于自帶的信號,槽函數(shù)可以自動生成,也可以使用自帶的。
在Designer中,點擊鍵盤F4按鈕,即可進入信號槽編輯狀態(tài)。在編輯狀態(tài)中,可以拖拽組件對象形成不同的信號槽連接,只需要在彈出的窗口中選擇對應(yīng)的函數(shù)即可。
配置好信號槽連接后,可以點擊F3退出此模式。在普通模式下,也可以配置信號槽的連接,需要切換到“信號與槽編輯器”,如下所示。
在此面板中,所有的信號槽連接都以表格的方式進行展示,點擊單元格也能配置。
除此之外,Designer也可以配置自帶信號與自定義槽函數(shù)的連接,只需要選中組件對象后,點擊鼠標右鍵的“轉(zhuǎn)到槽”。
在彈出窗口中,可以選擇當前組件適用的信號,如下所示。
選擇信號函數(shù)后,Designer會自動在C++代碼中生成對應(yīng)的槽函數(shù)。程序員只需要在這個自動生成的槽函數(shù)中添加要執(zhí)行的代碼即可,無需適用connect連接,因為信號與槽函數(shù)已經(jīng)連接好了。
在實際開發(fā)過程中,不建議使用Designer設(shè)計信號槽,仍然建議完全在C++代碼中手動編寫信號槽的相關(guān)代碼,原因是使用Designer的方式會導(dǎo)致信號與槽的對應(yīng)關(guān)系不明確,降低代碼的可讀性和可維護性。
四、ui指針(掌握)實際上Designer程序的原理是,通過用戶對圖形化設(shè)計界面的拖拽和屬性參數(shù)設(shè)置,自動生成.ui文件中的代碼,而.ui文件中的代碼是xml標簽。
ui文件中的xml代碼會在項目編譯的過程,轉(zhuǎn)換為C++代碼,也就是說在Designer中設(shè)計的每個組件都會以C++對象的形式在這個步驟中創(chuàng)建。
通過ui指針可以獲取和管理在Designer中設(shè)計的組件對象,包括對象的銷毀,即ui指針銷毀后,其管理的所有組件對象也一并銷毀。
五、基本組件(掌握) 5.1 QWidget常用屬性在講解各種不同的基本組件使用之前,先講解一些常用的QWidget類的屬性。
5.2 標簽 QLabel用來顯示文字或圖片,QLabel獨有屬性如下:
圖片下載建議使用必應(yīng)搜索:必應(yīng)
圖片導(dǎo)入項目的步驟如下:
1. 下載圖片(jpg或png)后,命名為全小寫英文,英文之間可以使用下劃線分割。
2. 把圖片放置到工作目錄下。
3. 在Qt Creator中,選中項目,鼠標右鍵,點擊“添加新文件”。
4. 在彈出的窗口中,按照下圖所示進行操作。
5. 在彈出的窗口中,填寫資源文件的民稱后,點擊“下一步”。
6. 在項目管理頁面,直接點擊“完成”??梢钥吹巾椖磕夸浵露嗔艘粋€.qrc格式的資源文件。
7. 選中.qrc資源文件,點擊下方的
,在彈出的下拉菜單中,點擊添加前綴,這一步只需要第一次操作即可。
8. 再次點擊
,此時可以在彈出的下拉菜單中點擊添加文件,點擊“添加文件”后,彈出文件選擇對話框,選擇要添加的圖片文件即可。
9. 可以在.qrc文件中看到剛剛添加的圖片文件,后面就可以在項目中使用這張圖片了。
設(shè)置圖片到QLabel組件的方式如下:
先編譯運行一遍程序(如果不這么做,Designer識別不了剛添加到資源文件中的圖片),然后在Designer中選中QLabel組件,設(shè)置屬性pixmap的值為顯示的圖片。需要注意的是,給pixmap屬性設(shè)置圖片時,要點擊“選擇資源”,而不是“選擇文件”。
這種設(shè)置方式進行圖像處理比較麻煩,最好在ps中處理好圖片資源。
通過C++代碼進行圖片縮放,相比之下處理能力更好一些。
需要注意的是,盡量不要使用過大的圖片,因為會增加程序的性能開銷。
5.3 按鈕類 5.3.1 按鈕類基本使用按鈕類組件有QPushButton、QCheckBox、QRadioButton、QToolButton,分別表示按壓式按鈕、單選框、多選框和工具欄按鈕。它們都有一個公共的基類:QAbstractButton,這個類規(guī)定了很多按鈕的基本功能框架。
QAbstractButton常用屬性有:
圖標下載網(wǎng)站-阿里巴巴矢量圖標庫:iconfont-阿里巴巴矢量圖標庫
QAbstractButton常用信號如下:
5.3.2 按鈕組 QButtonGroup有的界面按鈕很多,逐個按鈕建立信號槽未免顯得有些太過復(fù)雜。解決方法就是使用QButtonGroup按鈕組。
QButtonGroup類僅僅是邏輯上的分組,并沒有任何UI效果,也不屬于UI組件,因此不歸ui指針管理,需要程序員手動創(chuàng)建與銷毀。
構(gòu)造函數(shù):
QButtonGroup(QObject * parent = 0)
只要parent參數(shù)不是QWidget類型的,說明此類不是UI相關(guān)類型,不歸ui指針管理。
成員函數(shù):
void addButton(QAbstractButton * button, int id = -1)
向按鈕組中添加按鈕對象
參數(shù)1:按鈕對象
參數(shù)2:給按鈕一個id號,要求正數(shù)且唯一
需要注意的是,多選按鈕加到按鈕組后會自動互斥,需調(diào)用下面的函數(shù)解除互斥。
group->setExclusive(false);
信號函數(shù):
5.4 單行文本輸入框 QQLineEdit用于輸入單行文本信息。
常用屬性:
常用信號:
void textChanged(const QString & text)
每次文字發(fā)生變化時發(fā)射此信號,參數(shù)是新的文字
5.5 一組類似的組件這一組組件的功能類似,包括:QSpinBox、ProgressBar、QSlider、QScrollBar、QDial,它們的繼承結(jié)構(gòu)如下所示:
各個組件的外觀如下所示:
上面的組件有幾個共同的屬性:
大值
最小值
當前值,通知信號:
void valueChanged(int value)
5.6 組合框 QComboBox組合框用來代替QRadioButton等組件,可以點擊之后彈出多個選項(英文:Item,中文譯名為“項目”)。
常用屬性:
常用信號:
一、QString類(掌握)QString類是Qt的字符串類,采用Unicode編碼,每個字符是一個16位的QChar,而不是8位的char,因此Qt可以完美地處理中文,并且一個中文字符算作一個字符長度。
由于在Unicode編碼誕生之前,各國為自己的語言設(shè)計了本地的編碼(如中文的GBK編碼),在傳輸和轉(zhuǎn)碼過程中可能還會出現(xiàn)亂碼問題,如果在Qt開發(fā)的過程中出現(xiàn)亂碼問題,可以參考:從此亂碼是路人
QString的函數(shù)相當多,不要去死記函數(shù)的固定使用,要求做到:
需要注意的是,QString類基本做到了兼容std::string的API
需要記住的函數(shù)詞匯有:
append 向后追加
at 取出元素
begin 獲取開始位置的迭代器
clear 清空
compare 比較
contains 包含
count 數(shù)量
endsWith 以...結(jié)尾
fill 每個元素填充
indexOf 出現(xiàn)的位置序號
insert 插入
isEmpty/isNull 是否為空,注意二者有差別
lastIndexOf 最后一次出現(xiàn)的位置下標
length 長度
prepend 向前追加
push_back 向后追加
push_front 向前追加
remove 移除
replace 替換
size 大小
split 分割
startsWith 以...開始
swap 交換
trimmed 去除空格
truncate 截取
類型轉(zhuǎn)換示例代碼:
int i = 124;
// 靜態(tài)函數(shù)轉(zhuǎn)換:數(shù)字→字符串
QString s1 = QString::number(i);
qDebug()<< s1;
// 成員函數(shù)轉(zhuǎn)換:數(shù)字→字符串
QString s2;
s2.setNum(i);
qDebug()<< s2;
// 字符串→數(shù)字
QString str = "FF";
bool ok;
// 參數(shù)1:轉(zhuǎn)換結(jié)果
// 參數(shù)2:進制
int hex = str.toInt(&ok,16);
qDebug()<< "轉(zhuǎn)換后的數(shù)字是:"<< hex; // 255
qDebug()<< "轉(zhuǎn)換的結(jié)果是:"<< ok; // true
【課堂練習】寫一個函數(shù)輸入一個字符串,返回值是bool,如果這個字符串符合電子郵件的地址則返回true,不符合返回false。
判斷依據(jù)是:
Qt的容器類相比C++的容器類更加輕巧、安全和易于使用,因為Qt對其進行速度和存儲優(yōu)化,可以減少可執(zhí)行文件的大小;它們是線程安全的;在兼容C++容器類API接口的基礎(chǔ)上,拓展了API接口。
本次學(xué)習順序容器使用QList進行講解,關(guān)聯(lián)容器使用QMap進行講解。
2.1 QListQList是最常用的一種順序容器,以增刪改取遍歷進行講解演示。
到現(xiàn)在為止,Qt的課程中沒有創(chuàng)建過任何一個用戶自定義的類,下面手動創(chuàng)建一個基于C++的Student學(xué)生類,進行簡單的封裝后,把不同的學(xué)生對象存儲到QList中。
創(chuàng)建自定義C++類的步驟如下:
1. 在Qt Creator中選中項目名稱,鼠標右鍵,點擊“添加新文件”。
2. 在彈出的窗口中,按照下圖所示進行操作。
3. 在彈出的窗口,先輸入新創(chuàng)建的C++類名,然后點擊“下一步”。
4. 在項目管理頁面,直接點擊“完成”??梢钥吹巾椖恐性黾恿藢?yīng)頭文件和源文件。
需要注意的是,QStringList類可以基本等同于QList
用法與C++中的map類似。
三、Qt數(shù)據(jù)類型(熟悉) 3.1 Qt統(tǒng)一數(shù)據(jù)類型Qt是一個跨平臺的開發(fā)框架,但是Qt依賴的C++語言并不是跨平臺的,特別是很多基礎(chǔ)的數(shù)據(jù)類型在不同的平臺上可能會存在長度不一致的現(xiàn)象,所以當涉及跨平臺需求時,Qt設(shè)計了一些可以保持統(tǒng)一長度的數(shù)據(jù)類型。
3.2 Qt的通用數(shù)據(jù)類型QVariantQVariant類支持幾乎所有的Qt常見的基本數(shù)據(jù)類型的轉(zhuǎn)換。
// 數(shù)字 → 字符串
int a = 1;
QVariant v(a);
QString s = v.toString();
qDebug()<< s;
// 字符串 → 數(shù)字
QVariant v2(s);
int b = v2.toInt();
qDebug()<< b;
四、時間與日期(熟悉)Qt中使用QTime類來處理時間,使用QDate類來處理日期,這兩個類合并為QDateTime,可以同時處理時間和日期。
以QDateTime類來說明時間和日期的處理方法。
4.1 時間戳qint64 QDateTime::currentMSecsSinceEpoch() [static]
返回當前時間,格式為從1970-1-1 00:00:00 格林威治時間到現(xiàn)在的毫秒數(shù)。
可以利用上面的時間來作為生成隨機數(shù)的種子。
// 參數(shù)是隨機數(shù)種子
qsrand(QDateTime::currentMSecsSinceEpoch());
// 產(chǎn)生一個0-9的隨機數(shù)
int rand = qrand()%10;
qDebug()<< "偽隨機數(shù):"<< rand;
4.2 格式化可以使用QDateTime對日期和時間進行格式化,函數(shù)如下:
QString QDateTime::toString(const QString & format) const
參數(shù)是一個字符串,為具體格式:
可以使用下面的函數(shù)來獲取基于當前時區(qū)的當前時間和日期的QDateTime對象,當前指的是來自于系統(tǒng)數(shù)據(jù)。
QDateTime QDateTime::currentDateTime() [static]
// 先獲得一個基于當前的QDateTime對象
QDateTime dt = QDateTime::currentDateTime();
// 格式化
QString text = dt.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<< text;
4.3 相關(guān)UI組件主要有QDateEdit、QDateTimeEdit、QTimeEdit和QCalendarWidget。
五、定時器 QTimer(掌握)QTimer類與硬件定時器功能類似,主要完成兩個功能:
常用屬性:
主要通過singleShot的setter設(shè)定定時器是否為一次性,通過interva的setter設(shè)置定時器觸發(fā)時間,然后調(diào)用啟動函數(shù):
void QTimer::start() [slot]
需要注意的是,如果定時器已經(jīng)在運行了,再次調(diào)用start函數(shù)會停止定時器并重新運行。
如果定時器已經(jīng)運行,也可以調(diào)用下面的函數(shù)停止定時器的運行:
void QTimer::stop() [slot]
當定時器觸發(fā)時會發(fā)射以下信號:
void QTimer::timeout() [signal]
此類的對象需要手動創(chuàng)建:
QTimer::QTimer(QObject * parent = 0)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧