C++ Qt開(kāi)發(fā)之PushButton按鈕組件的使用詳解
前言
Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開(kāi)發(fā)極大的方便了開(kāi)發(fā)效率,本章將重點(diǎn)介紹QPushButton
按鈕組件的常用方法及靈活運(yùn)用。
QPushButton 是 Qt 框架中用于創(chuàng)建按鈕的組件類,是 QWidget
的子類。按鈕是用戶界面中最常見(jiàn)的交互元素之一,用于觸發(fā)特定的操作或事件。該組件具有豐富的屬性和方法,使其在不同的應(yīng)用場(chǎng)景中能夠靈活運(yùn)用。
以下是 QPushButton
類中常用的一些方法,包括說(shuō)明和簡(jiǎn)要概述:
方法 | 說(shuō)明 |
---|---|
QPushButton(const QString &text, QWidget *parent = nullptr) | 構(gòu)造函數(shù),創(chuàng)建一個(gè)帶有指定文本和父對(duì)象的按鈕。 |
void setText(const QString &text) | 設(shè)置按鈕的文本。 |
QString text() const | 獲取按鈕的文本。 |
void setIcon(const QIcon &icon) | 設(shè)置按鈕的圖標(biāo)。 |
QIcon icon() const | 獲取按鈕的圖標(biāo)。 |
void setCheckable(bool checkable) | 設(shè)置按鈕是否可切換狀態(tài)。 |
bool isCheckable() const | 檢查按鈕是否可切換狀態(tài)。 |
void setChecked(bool checked) | 設(shè)置按鈕的切換狀態(tài)。 |
bool isChecked() const | 獲取按鈕的當(dāng)前切換狀態(tài)。 |
void setEnabled(bool enabled) | 啟用或禁用按鈕。 |
bool isEnabled() const | 檢查按鈕是否啟用。 |
void setDefault(bool isDefault) | 設(shè)置按鈕是否為默認(rèn)按鈕。 |
bool isDefault() const | 檢查按鈕是否為默認(rèn)按鈕。 |
void click() | 模擬按鈕點(diǎn)擊。 |
void setFlat(bool flat) | 設(shè)置按鈕是否為平面按鈕。 |
bool isFlat() const | 檢查按鈕是否為平面按鈕。 |
void show() | 顯示按鈕。 |
這些方法提供了豐富的功能,使得 QPushButton
可以適應(yīng)不同的界面需求。通過(guò)設(shè)置文本、圖標(biāo)、切換狀態(tài)等屬性,以及連接點(diǎn)擊事件等,可以實(shí)現(xiàn)按鈕的各種交互效果。
PushButton 的使用有兩種方式,讀者可以直接在圖形界面上面拖拽來(lái)使用,也可以通過(guò)new QPushButton
的方式動(dòng)態(tài)的創(chuàng)建生成。
代碼方式創(chuàng)建
首先我們以第一種純代碼的方式來(lái)使用PushButton
組件,讀者需要導(dǎo)入#include <QPushButton>
類,導(dǎo)入后可以使用new
關(guān)鍵詞創(chuàng)建一個(gè)按鈕組件。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <iostream> #include <QPushButton> // 設(shè)置函數(shù),用于綁定事件 void Print() { std::cout << "hello lyshark" << std::endl; } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 創(chuàng)建[退出]按鈕 QPushButton * btn = new QPushButton; // 創(chuàng)建一個(gè)按鈕 // btn->show(); // 用頂層方法彈出按鈕 btn->setParent(this); // 設(shè)置父窗體(將btn內(nèi)嵌到主窗體中) btn->setText("退出"); // 設(shè)置按鈕text顯示 btn->move(100,20); // 移動(dòng)按鈕位置 btn->resize(100,50); // 設(shè)置按鈕大小 btn->setEnabled(true); // 設(shè)置是否可被點(diǎn)擊 // 創(chuàng)建[觸發(fā)信號(hào)]按鈕 QPushButton * btn2 = new QPushButton("觸發(fā)信號(hào)",this); btn2->setParent(this); btn2->move(100,100); btn2->resize(100,50); // 設(shè)置主窗體常用屬性 this->resize(300,200); // 重置窗口大小,調(diào)整主窗口大小 this->setWindowTitle("我的窗體"); // 重置主窗體的名字 this->setFixedSize(300,200); // 固定窗體大小(不讓其修改) // this->showFullScreen(); // 設(shè)置窗體全屏顯示 // 設(shè)置主窗體特殊屬性 // setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); // 隱藏標(biāo)題欄 // 為按鈕綁定事件 connect(信號(hào)的發(fā)送者,發(fā)送的信號(hào),信號(hào)的接受者,處理的函數(shù)(槽函數(shù))) connect(btn,&QPushButton::clicked,this,&QWidget::close); // 將窗體中的 [觸發(fā)信號(hào)] 按鈕,連接到Print函數(shù)中. connect(btn2,&QPushButton::clicked,this,&Print); } MainWindow::~MainWindow() { delete ui; }
上述代碼中我們通過(guò)new QPushButton
的方式創(chuàng)建了兩個(gè)按鈕,并分別調(diào)整了按鈕的常規(guī)屬性包括按鈕的高度寬度以及按鈕的大小、按鈕標(biāo)題等,通過(guò)connect
分別為按鈕綁定了兩個(gè)事件,以用于推出和觸發(fā)打印函數(shù),讀者可自行運(yùn)行代碼觀察變化;
圖形界面創(chuàng)建
通過(guò)圖形界面的創(chuàng)建很簡(jiǎn)單,只需要拖拽控件Qt會(huì)幫我們做完所有的工作,這里我們就重點(diǎn)說(shuō)說(shuō)Qt中的QSS組件庫(kù)的使用,Qt Style Sheets(QSS)是一種用于定義Qt應(yīng)用程序外觀和樣式的樣式表語(yǔ)言。類似于HTML和CSS中的樣式表,QSS允許開(kāi)發(fā)者通過(guò)簡(jiǎn)單的樣式規(guī)則來(lái)定義Qt界面的外觀,包括控件的顏色、字體、邊框、背景等。
使用QSS,開(kāi)發(fā)者可以很容易地改變應(yīng)用程序的外觀,使其適應(yīng)不同的用戶界面設(shè)計(jì)需求,或者根據(jù)應(yīng)用程序的主題進(jìn)行個(gè)性化定制。
QSS可以通過(guò)在組件上直接追加屬性的方式實(shí)現(xiàn),通過(guò)使用setStyleSheet
屬性可以很容易的對(duì)特定的組件進(jìn)行著色操作,如下我們將第一個(gè)pushButton
設(shè)置為黃色可以這樣寫(xiě);
//設(shè)置pushButton的背景顏色為黃色 ui->pushButton->setStyleSheet("background:yellow");
當(dāng)然了如果我們將ui->
指定傳入this->
則會(huì)對(duì)當(dāng)前整個(gè)頁(yè)面生效,當(dāng)如下界面被執(zhí)行時(shí)則整個(gè)頁(yè)面會(huì)變成藍(lán)色;
this->setStyleSheet("background:blue");
除了使用代碼來(lái)設(shè)置樣式表外,也可以在設(shè)計(jì)模式中為添加到界面上的部件設(shè)置樣式表,這樣更加直觀。先注釋掉上面添加的代碼,然后進(jìn)入設(shè)計(jì)模式。在界面上右擊,在彈出的菜單中選擇“改變樣式表”,這時(shí)會(huì)出現(xiàn)編輯樣式表對(duì)話框,在其中輸入如下代碼,如圖;
則此時(shí)將會(huì)針對(duì)所有的pushButton
組件生效,當(dāng)程序運(yùn)行時(shí)所有的組件都見(jiàn)變?yōu)樗{(lán)色,當(dāng)然了在某些時(shí)候我們還是希望能對(duì)單獨(dú)的組件進(jìn)行控制,例如將第二個(gè)按鈕上色第一個(gè)保持不變,則此時(shí)需要將規(guī)則由;
QPushButton{ background-color: rgb(0, 0, 255); }
更改為QPushButton
組件名外加#
緊隨其后的是ObjectName
對(duì)象名pushButton_2
,那么就要寫(xiě)成如下規(guī)則;
QPushButton#pushButton_2{ background-color: rgb(0, 0, 255); }
此時(shí)再次運(yùn)行程序,則只有第二個(gè)按鈕被標(biāo)記為藍(lán)色,第一個(gè)按鈕將會(huì)保持默認(rèn)色,如下圖;
當(dāng)然這樣的配色顯然是無(wú)法正常使用的,如果讀者學(xué)過(guò)前端應(yīng)該知道使用CSS
如何美化按鈕,QSS也支持CSS中的各種事件,我們以按鈕的普通狀態(tài),按下抬起為例,將如下QSS
設(shè)置到組件上。
/*按鈕普通態(tài)*/ QPushButton { /*字體為微軟雅黑*/ font-family:Microsoft Yahei; /*字體大小為20點(diǎn)*/ font-size:20pt; /*字體顏色為白色*/ color:white; /*背景顏色*/ background-color:rgb(14 , 150 , 254); /*邊框圓角半徑為8像素*/ border-radius:8px; } /*按鈕停留態(tài)*/ QPushButton:hover { /*背景顏色*/ background-color:rgb(44 , 137 , 255); } /*按鈕按下態(tài)*/ QPushButton:pressed { /*背景顏色*/ background-color:rgb(14 , 135 , 228); /*左內(nèi)邊距為3像素,讓按下時(shí)字向右移動(dòng)3像素*/ padding-left:3px; /*上內(nèi)邊距為3像素,讓按下時(shí)字向下移動(dòng)3像素*/ padding-top:3px; }
此時(shí)會(huì)呈現(xiàn)三種狀態(tài),當(dāng)默認(rèn)未被選中時(shí)會(huì)使用QPushButton
來(lái)渲染,而QPushButton:hover
則用于懸停時(shí)的顯示,最后的QPushButton:pressed
則是被按下是的顏色渲染,如下所示;
接著我們來(lái)看一下如何添加背景圖片到Qt
中并使用QSS
將背景附加到PushButton
上,首先分別準(zhǔn)備一些素材文件,這里提供三個(gè)不同的png圖片;
下面是普通態(tài)的背景圖,用了同一張背景圖:
下面是懸停態(tài)的背景圖:
下面是按下態(tài)的背景圖:
接著就是要把這些圖片添加到Qt中的資源中去,在項(xiàng)目主目錄上右鍵選中Add New...
按鈕,并找到Qt
下的Qt Resource File
選項(xiàng)卡,并點(diǎn)擊Choose...
按鈕,如下圖;
讀者可自行命名該資源名稱這里我就叫lyshark.qrc
,接著就需要點(diǎn)擊Add Prefix
按鈕,并在項(xiàng)目根目錄新建一個(gè)lyshark
目錄并將所需文件拖拽到該目錄下,如下圖;
繼續(xù)點(diǎn)擊AddFiles
按鈕依次選中資源并添加到項(xiàng)目源文件中,當(dāng)添加結(jié)束后按下Ctrl+S
保存RC文件,即可看到如下圖所示;
樣式表設(shè)置背景圖可以使用setStyleSheet
函數(shù),在程序里設(shè)置按鈕的樣式表,具體程序如下所示:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 美化第一個(gè)按鈕 ui->pushButton->setStyleSheet( "QPushButton{border-image: url(:/new/lyshark/Qt_threeStatus_ok.png);}" "QPushButton:hover{border-image: url(:/new/lyshark/Qt_threeStatus_ok1.png);}" "QPushButton:pressed{border-image: url(:/new/lyshark/Qt_threeStatus_OK2.png);}" ); // 美化第二個(gè)按鈕 ui->pushButton2->setStyleSheet( "QPushButton{border-image: url(:/new/lyshark/Qt_threeStatus_ok.png);}" "QPushButton:hover{border-image: url(:/new/lyshark/Qt_threeStatus_ok1.png);}" "QPushButton:pressed{border-image: url(:/new/lyshark/Qt_threeStatus_OK2.png);}" ); }
也可以在 QtDesigner
上,即ui
文件上的按鈕處編輯樣式表,如下所示:
QPushButton{border-image: url(:/new/lyshark/Qt_threeStatus_ok.png)} QPushButton:hover{border-image: url(:/new/lyshark/Qt_threeStatus_ok1.png)} QPushButton:pressed{border-image: url(:/new/lyshark/Qt_threeStatus_OK2.png)}
運(yùn)行上述代碼后將分別美化兩個(gè)按鈕,并輸出如下圖所示;
當(dāng)然,此類按鈕的美化完全可以使用QSS
來(lái)實(shí)現(xiàn)并不需要導(dǎo)入樣式圖,這種方法比上面用圖標(biāo)作為背景的好處就是可以不需要設(shè)計(jì)背景圖,而且在樣式不設(shè)置字體的情況下,可以隨意更改文字以及文字的大小、位置、字體等顯示效果。
以上就是C++ Qt開(kāi)發(fā)之PushButton按鈕組件的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Qt PushButton按鈕的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能
本文介紹了如何使用QT技術(shù)實(shí)現(xiàn)一個(gè)具有動(dòng)態(tài)效果的隨機(jī)驗(yàn)證碼系統(tǒng),詳述了CaptchaMovableLabel和CaptchaLabel兩個(gè)自定義類的功能,包括顯示和拖動(dòng)字母、繪制噪音點(diǎn)和線條、以及隨機(jī)生成字母等,講解了如何通過(guò)繼承QWidget和QLabel來(lái)實(shí)現(xiàn)這些功能,并通過(guò)MainWindow創(chuàng)建界面2024-10-10C語(yǔ)言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對(duì)比
這篇文章主要介紹了C語(yǔ)言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對(duì)比,分別用于讀取組格式函數(shù)和讀取密碼格式,需要的朋友可以參考下2015-08-08簡(jiǎn)單掌握C++編程中的while與do-while循環(huán)語(yǔ)句使用
這篇文章主要介紹了C++編程中的while與do-while循環(huán)語(yǔ)句使用,區(qū)別就是while是先判斷再執(zhí)行,而do-while是先執(zhí)行再判斷,需要的朋友可以參考下2016-01-01C語(yǔ)言文件操作函數(shù)freopen詳細(xì)解析
替換一個(gè)流,或者說(shuō)重新分配文件指針,實(shí)現(xiàn)重定向。如果stream流已經(jīng)打開(kāi),則先關(guān)閉該流。如果該流已經(jīng)定向,則freopen將會(huì)清除該定向。此函數(shù)一般用于將一個(gè)指定的文件打開(kāi)一個(gè)預(yù)定義的流:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出或者標(biāo)準(zhǔn)出錯(cuò)2013-10-10