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