Qt之QPushButton介紹

PushButton顧名思義----按鈕,也是Qt常用的控件之一,至於應用場景,就不必多說了,下面將從以下幾個方面對QPushButton進行介紹:

[1]常用屬性介紹

[2]信號事件

[3]快捷鍵設置

針對QPushButton還會用到對其背景顏色、圓角邊框、漸變顯示效果、鼠標懸停與鼠標離開的不同顯示效果、用圖片代替QPushButton進行顯示等美化相關的屬性進行設置。這些全部用Qt Style Sheet即可完成,Qt Style Sheet不在本章的講解範圍內,後面會專門講解。

 

常用屬性介紹:

是否可被選擇,該屬性默認關閉

void setCheckable(bool)

如果該屬性被設置爲true,則該Button具有可選擇的屬性。點擊一下將會置爲選擇狀態,再點擊一次取消選擇(可以看做是一個單選或多選框)。

處於被選擇狀態的PushButton

設置排他性

void setAutoExclusive(bool)

如果有多個PushButton設置了可選擇屬性和排他屬性,則在同一個widget下的PushButton默認情況下最多只能有一個被選則(類似於單選框)。

下面的兩個按鈕在設置了可選擇以及排他性的情況下,默認只能有一個被選中。

接下來我們再拖動兩個PushButton,並分別打開排他性和可選擇:

默認情況下,這4個按鈕相互排斥。如果想要實現1,2爲一組並且相互排斥,3,4爲一組並且相互排斥,1,3, 1,4 2,3 2,4相互之間不影響,在這裏提供兩種方法:

[1]分別放到兩個Widget中

運行結果如下:

[2]設置QButtonGroup

在構造函數中添加以下代碼:

QButtonGroup *bg1 = new QButtonGroup(this);
QButtonGroup *bg2 = new QButtonGroup(this);

bg1->addButton(ui->pushButton_1);
bg1->addButton(ui->pushButton_2);

bg2->addButton(ui->pushButton_3);
bg2->addButton(ui->pushButton_4);

該方法的原理是將b1、b2設置爲1組將b3、b4設置爲一組。這樣兩組之間不會相互影響。

信號事件:

QPushButton的信號事件有下面這幾個:

[signal] void QAbstractButton::clicked()

[signal] void QAbstractButton::clicked(bool checked = false)

[signal] void QAbstractButton::pressed()

[signal] void QAbstractButton::released()

[signal] void QAbstractButton::toggled(bool checked)

clicked()和clicked(bool checked = false)信號:在按鈕被點擊時觸發,兩者的區別是一個會傳遞是否被選擇的狀態,一個不會。通常情況下,如果按鈕沒有打開可被選擇的屬性,兩者無任何區別(checked等於false)。

pressed()信號:在按下時觸發

released()信號:在鬆開時觸發

toggled:按鈕選擇狀態被改變時觸發(未被選擇----被選擇、被選擇----未被選擇),要想能觸發此信號,需要先打開可被選擇的屬性

接下來通過代碼來演示:

聲明槽函數:

public slots:
    void Clicked();
    void Clicked(bool checked);
    void Pressed();
    void Released();
    void Toggled(bool checked);

函數具體定義:

void Widget::Clicked()
{
    qDebug() << "Clicked";
}
void Widget::Clicked(bool checked)
{
    qDebug() << "Clicked:" << checked;
}
void Widget::Pressed()
{
    qDebug() << "Pressed";
}

void Widget::Released()
{
    qDebug() << "Released";
}

void Widget::Toggled(bool checked)
{
    qDebug() << "Toggled:" << checked;
}

在設計器中新拖動兩個按鈕,一個默認屬性(不可被選擇)、一個設置了可被選擇屬性:

並分別進行信號與槽的綁定:

當兩次點擊不可被選擇的按鈕時的運行效果:

可以看到clicked信號所傳遞的checked總爲false,並且toggled信號不會被觸發

當兩次點擊可選擇按鈕時的運行效果:

可以看到clicked信號所傳遞的checked在按鈕被選擇時爲true,在取消選擇時爲false,此時toggled也被觸發了,且現象和clicked信號一致。

其實,對於可選擇的按鈕來說,兩者是有區別的。Clicked信號只能在用戶在界面上觸發,而toggled信號是隻要選擇狀態改變就會觸發(無論是在程序裏改變還是在用戶界面上改變)

驗證:

在構造函數中設置按鈕爲選擇狀態:

ui->pushButtonCheckable->setChecked(true);

程序運行時的效果:

小結:如果想要在按鈕選擇狀態改變時就觸發信號,而不分是用戶改變的還是程序改變的時,則使用toggled信號。如果只響應用戶在界面上的操作導致按鈕選擇狀態改變時,則使用clicked信號。對可選擇的按鈕來說,toggled信號更容易觸發。

快捷鍵設置

直接以後來新加的"不可被選擇"的按鈕爲例進行快捷鍵設置的講解。

直接在ui設計器的屬性欄設置shortcut屬性:

此時在鍵盤中使用Ctrl+k快捷鍵時和用鼠標點擊的效果一致。

用代碼的方式實現:

pushButtonNoCheckable->setShortcut(QApplication::translate("Widget", "Ctrl+K", nullptr));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章