柚子快報(bào)邀請(qǐng)碼778899分享:c++ 【QT】常用控件(一)
柚子快報(bào)邀請(qǐng)碼778899分享:c++ 【QT】常用控件(一)
個(gè)人主頁(yè)~
常用控件
一、控件是什么二、QWidget核心屬性1、enabled2、geometry3、windowTitle4、windowIcon5、windowOpacity6、cursor7、font8、toolTip9、focusPolicy10、styleSheet
一、控件是什么
ui設(shè)計(jì)界面左邊的這些都叫控件,除了這些以外,QT還允許自定義控件,滿足不同的需求
二、QWidget核心屬性
1、enabled
API說(shuō)明isEnabled獲取到控件的可用狀態(tài)setEnabled設(shè)置控件是否可用
我們來(lái)寫(xiě)一個(gè)用一個(gè)按鈕控制另一個(gè)按鈕可用狀態(tài)的QT程序
我比較喜歡用ui界面轉(zhuǎn)到槽的方式寫(xiě)QT程序
#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_control_clicked()
{
if(ui->pushButton->isEnabled() == true)
ui->pushButton->setEnabled(false);
else
ui->pushButton->setEnabled(true);
}
void Widget::on_pushButton_clicked()
{
qDebug() << "可以使用";
}
當(dāng)將控件設(shè)置為不可用時(shí),顏色偏暗淡,不可點(diǎn)擊
enabled
2、geometry
API說(shuō)明geometry()獲取到控件的位置和尺寸,返回的結(jié)果是QRect,包含x,y,width,height,其中x和y是左上角坐標(biāo)setGeometry(QRect) / setGeometry(int x,int y,int width,int height)設(shè)置空間的位置和尺寸,分為兩種方式
geometry在中文里是幾何的意思,表示一個(gè)物體的幾何性質(zhì),它有四個(gè)參數(shù)以表示空間的幾何性質(zhì),左上角的坐標(biāo)x,y以及控件的寬度和高度
geometry_1
geometry_2
第一個(gè)視頻僅控制左上角坐標(biāo),這樣會(huì)導(dǎo)致width和height跟著變化,因?yàn)槲覀冇玫氖莝etX和setY,強(qiáng)制改變了左上角坐標(biāo) 第二個(gè)視頻的效果也可以直接使用move函數(shù)進(jìn)行控制
這里還有一個(gè)有趣的程序
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
ui->label->setText("感謝導(dǎo)員,我出去玩了");
}
void Widget::on_pushButton_2_clicked()
{
int width = this->geometry().width();
//獲取窗口寬度
int height = this->geometry().height();
//獲取窗口高度
int x = rand() % width;
int y = rand() % height;
//保證按鈕在窗口內(nèi)
//這里用的move
ui->pushButton_2->move(x, y);
}
geometry_3
我們知道,窗口都會(huì)帶有下面紅色方框中的內(nèi)容,這個(gè)東西叫做window frame,我們?cè)谑褂胓eometry的時(shí)候的x,y是不包含這個(gè)的,要想使用window frame的左上角就要用frameGeometry這個(gè)函數(shù) 通過(guò)geometry和frameGeometry就可以實(shí)現(xiàn)整個(gè)窗口以及控件的移動(dòng)操作,但是我們有很多的API,雖然設(shè)計(jì)的比較冗余,但是QT一個(gè)特點(diǎn)就是盡量符合人的直覺(jué),就是我們有可能不用通過(guò)官方文檔就能把程序?qū)憣?duì)
3、windowTitle
API說(shuō)明windowTitle獲取到控件的窗口標(biāo)題setWindowTitle(const QString& title)設(shè)置控件的窗口標(biāo)題
4、windowIcon
API說(shuō)明windowIcon()獲取到控件的窗口圖標(biāo),返回QIcon對(duì)象setWindowIcon(const QIcon& icon)設(shè)置控件的窗口圖標(biāo)
窗口和任務(wù)欄圖標(biāo)都會(huì)變成設(shè)置成的照片
但是我們一般不會(huì)通過(guò)文件的絕對(duì)路徑引入照片,因?yàn)槲覀儫o(wú)法保證我D盤(pán)中的圖片在你的D盤(pán)當(dāng)中也有,我們還有兩種辦法,一種是相對(duì)路徑,另一種是使用qrc,相對(duì)路徑的方法就是在該項(xiàng)目的工作目錄中建一個(gè)新的文件夾用來(lái)專門(mén)存放圖片,比如文件夾的名字叫做photo,當(dāng)我們需要使用時(shí)寫(xiě)"./photo/slm.jpg",但是這樣的話還是會(huì)因?yàn)橛脩粽`刪而導(dǎo)致照片無(wú)法使用,這時(shí)對(duì)于這種圖片一類的小文件,我們可以使用qrc來(lái)直接將圖片轉(zhuǎn)化為二進(jìn)制代碼存儲(chǔ)在項(xiàng)目當(dāng)中,這樣就永遠(yuǎn)不會(huì)丟失了
右鍵點(diǎn)擊Add New,選擇Qt resource file,起一個(gè)英文名字,這里叫resource file
點(diǎn)擊Add Prefix,將前綴改為/ 然后點(diǎn)擊Add Files,將要加入的圖片放到qrc文件的同級(jí)目錄中,下面是添加完畢的效果 在代碼中這樣使用: 這里的 : 作為開(kāi)頭,表示從qrc中讀取資源 這里的 / 是上面配置的前綴 這里的 slm.jpg 是資源名稱
qrc適合管理小的資源,對(duì)圖片類的很有效,不過(guò)對(duì)于視頻一類的大資源是不行的,因?yàn)檫@會(huì)導(dǎo)致exe文件也變大
5、windowOpacity
API說(shuō)明windowOpacity()獲取到控件的不透明數(shù)值,返回float,取值為0.0~1.0,0.0表示透明,1.0表示完全不透明setWindowOpacity(float n)設(shè)置控件的不透明數(shù)值
opacity_1
6、cursor
API說(shuō)明cursor()獲取到當(dāng)前widget的cursor屬性,返回QCursor對(duì)象,當(dāng)鼠標(biāo)懸停在該widget上時(shí),就會(huì)顯示出對(duì)應(yīng)的形狀setCursor(const QCursor& cursor)設(shè)置該widget光標(biāo)的形狀,僅在鼠標(biāo)停留在該widget上時(shí)生效QGuiApplication::setOverrideCursor(const QCursor& cursor)設(shè)置全局光標(biāo)的形狀,對(duì)整個(gè)程序中的所有widget都會(huì)生效,覆蓋上面的setCursor設(shè)置的內(nèi)容
我們可以直接通過(guò)屬性欄來(lái)控制,也可以使用代碼控制
cursor_1
代碼版本:
cursor_2
這是系統(tǒng)內(nèi)置的所有光標(biāo)形狀,是以一個(gè)枚舉體來(lái)存儲(chǔ)的 我們來(lái)將光標(biāo)改變?yōu)樽远x圖片
首先使用qrc將圖片加載進(jìn)去,步驟如同上文,不再贅述,然后定義一個(gè)位圖對(duì)象加載并縮放圖片,然后將圖片設(shè)置為光標(biāo)形狀
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPixmap pixmap(":/slm.jpg");//創(chuàng)建位圖對(duì)象并加載自定義圖片
pixmap = pixmap.scaled(32,32);//縮放圖片為32*32
QCursor cursor(pixmap,3,3);//這里的3,3是熱點(diǎn)的位置,也就是點(diǎn)擊時(shí)的有效位置
this->setCursor(cursor);
}
Widget::~Widget()
{
delete ui;
}
cursor
7、font
API說(shuō)明font()獲取當(dāng)前widget的字體信息,返回QFont對(duì)象setFont(const QFont& font)設(shè)置當(dāng)前widget字體信息
這里的QFont有七種屬性 family:字體 pointSize:字體大小 weight:字體粗細(xì) bold:是否加粗 italic:是否傾斜 underline:是否有下劃線 strikeOut:是否有刪除線
我們可以通過(guò)屬性面板直接設(shè)置 也可以通過(guò)代碼和ui一起實(shí)現(xiàn)
8、toolTip
API說(shuō)明setToolTip設(shè)置toolTip,鼠標(biāo)懸停時(shí)會(huì)有提示說(shuō)明setToolTipDuring設(shè)置toolTip提示的時(shí)間
toolTip
9、focusPolicy
API說(shuō)明focusPolicy()獲取該widget的focusPolicy,返回Qt::FocusPolicysetFocusPolicy(Qt::FocusPolicy)設(shè)置widget的focusPolicy
Qt::FocusPolicy是一個(gè)枚舉類型,取值如下
enum FocusPolicy {
NoFocus = 0,//控件不會(huì)接收鍵盤(pán)焦點(diǎn)
TabFocus = 0x1,//控件可以通過(guò)Tab鍵接收焦點(diǎn)
ClickFocus = 0x2,//控件在鼠標(biāo)點(diǎn)擊時(shí)接收焦點(diǎn)
StrongFocus = TabFocus | ClickFocus | 0x8,//控件可以通過(guò)Tab鍵和鼠標(biāo)點(diǎn)擊接收焦點(diǎn)(默認(rèn))
WheelFocus = StrongFocus | 0x4//在上一條的基礎(chǔ)上增加鼠標(biāo)滾輪獲取焦點(diǎn)
};
這個(gè)就不必多說(shuō)了,只要是平常玩玩電腦的看完這些解釋都就知道這個(gè)焦點(diǎn)的概念,雖然不好說(shuō)出來(lái),但是抽象的概念大家都是有的,當(dāng)我們給控件設(shè)置這些枚舉值時(shí)會(huì)達(dá)到對(duì)應(yīng)的效果
10、styleSheet
通過(guò)QSS設(shè)置widget的樣式,QSS是QT借鑒CSS的,只支持CSS其中的一部分 當(dāng)然這里的color不是只有我們認(rèn)識(shí)的那幾個(gè)單詞的顏色,自然界的顏色有無(wú)數(shù)種,在計(jì)算機(jī)中,顏色是由一個(gè)個(gè)像素光點(diǎn)顯示的,它通過(guò)RGB,也就是red,green,blue三種顏色的深淺來(lái)控制可以形成所有的顏色,對(duì)于8位深度的顯示器來(lái)說(shuō),它們每一個(gè)顏色深度都是由一個(gè)字節(jié)來(lái)存儲(chǔ)的,也就是說(shuō)電腦能夠呈現(xiàn)的顏色有256256256種,也就是1600多萬(wàn)種,對(duì)于更高規(guī)格的顯示器這個(gè)數(shù)字會(huì)更多
今日分享就到這~
柚子快報(bào)邀請(qǐng)碼778899分享:c++ 【QT】常用控件(一)
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。