QPushButton繼承自QAbstractButton(再繼承自QWidget),主要提供視窗的按鈕外觀及行為,在 使用 Signal 與 Slot(使用按鈕關閉視窗) 已經看過QPushButton的基本運用,接下來的這個簡單範例,將示範幾個QPushButton的外觀設定:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMenu>
#include <QVBoxLayout>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("QPushButton");
window->resize(250, 50);
QPushButton *btn1 = new QPushButton("Normal Button");
QPushButton *btn2 = new QPushButton("Toggle Button");
btn2->setCheckable(TRUE);
btn2->setChecked(TRUE);
QPushButton *btn3 = new QPushButton("Flat Button");
btn3->setFlat(TRUE);
QPushButton *btn4 = new QPushButton( "Popup Button");
QMenu *menu = new QMenu;
menu->addAction("Open Item");
menu->addAction("Save Item");
menu->addMenu("More Item");
menu->addSeparator();
menu->addAction("Close Item");
btn4->setMenu(menu);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(btn1);
layout->addWidget(btn2);
layout->addWidget(btn3);
layout->addWidget(btn4);
layout->addStretch(1);
window->setLayout(layout);
window->show();
return app.exec();
}
btn1為最基本的QPushButton建構,btn2使用setCheckable()方法設定按鈕為可停駐的Toggle Button,並使用setChecked()設定其預設為停駐狀態,btn3使用setFlat()設定按鈕為沒有浮起框線的平坦按鈕,只有在按下時才 會顯示QPushButton被按下的外觀。
QPushButton可以設定按下時出現下拉選單,設定選單時使用的是QMenu,每個選單下的選項為QAction的實例,使用QMenu的 addAction()將QAction的實例加入可以成為一個選項,若要加入子選單,則使用addMenu()加入,addAction()與 addMenu()都可以直接指定字串,將自動產生QAction與QMenu。addSeparator()則在選單中加入分隔線。
要設定QPushButton按下後出現選單,則使用其setMenu()方法。程式中使用QVBoxLayout的addStretch()加入了拉伸 係數(stretch factor),每個QWidget在使用addWidget()加入版面配置時,也可以指定一個拉伸係數,不指定的話拉伸係數預設為0,拉伸係數是當您 在拉伸版面時,每個元件消耗多餘空間的相對比例,在這個範例中,由於QWidget加入時拉伸係數預設為0,所以最後使用addStretch(1)時表 示剩餘的空間將全部作為空白的空間。
下圖為程式示範畫面之一,Toggle Button為停駐狀態,Flat Button沒有按下時是平坦狀態,而按下第四個按鈕出現了選單。
下圖為按下Flat Button時的畫面示範: