目錄
1 -> 什么是 PushButton?
2 -> 相關屬性
3 -> 代碼示例
3.1 -> 帶有圖標的按鈕
3.2 -> 帶有快捷鍵的按鈕
4 -> 總結
1 -> 什么是 PushButton?
在 Qt 框架中,QPushButton 是最基礎且最常用的按鈕控件之一,它是用戶界面交互的核心元素。作為 QAbstractButton 類的子類,PushButton 代表了傳統的可點擊按鈕,用于觸發應用程序中的特定操作或命令。
QPushButton 繼承自 QAbstractButton。這個類是一個抽象類,是其他按鈕的父類。
在 Qt Designer 中也能夠看到這里的繼承關系。
2 -> 相關屬性
QAbstractButton 中,和 QPushButton 相關性較大的屬性。
屬性 | 說明 |
text | 按鈕中的文本 |
icon | 按鈕中的圖標 |
iconSize | 按鈕中圖標的尺寸 |
shortCut | 按鈕對應的快捷鍵 |
autoRepeat | 按鈕是否會重復觸發。當鼠標左鍵按住不放時, 如果設為 true,則會持續產生鼠標點擊事件; 如果設為 false,則必須釋放鼠標,再次按下鼠標時才能產生點擊事件。(相當于游戲手柄上的 “連發” 效果) |
autoRepeatDelay | 重復觸發的延時時間。按住按鈕多久之后,開始重復觸發 |
autoRepeatInterval | 重復觸發的周期 |
1. QAbstractButton 作為 QWidget 的子類,當然也繼承了 QWidget 的屬性。上面介紹的 QWidget 里的各種屬性用法,對于 QAbstractButton 同樣適用。因此表格中僅僅列出 QAbstractButton 獨有的屬性。
2. Qt 的 API 設計風格是非常清晰的。此處列出的屬性都是可以獲取和設置的。例如,使用 text() 獲取按鈕文本;使用 setText() 設置文本。
事實上,QPushButton 的核心功能都是 QAbstractButton 提供的。自身提供的屬性都比較簡單。
其中,default 和 audoDefault 影響的是按下 enter 時自動點擊哪個按鈕的行為;flat 把按鈕設置為扁平的樣式。
3 -> 代碼示例
3.1 -> 帶有圖標的按鈕
1. 創建 rasource.qrc 文件,并導入圖片
具體操作參見:【Qt開發】常用控件(四)
2. 在界面上創建一個按鈕
3. 修改 widget.cpp,給按鈕設置圖標
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 創建圖標對象QIcon icon(":/Science.png");// 設置圖標ui->pushButton->setIcon(icon);// 設置圖標尺寸ui->pushButton->setIconSize(QSize(50, 50));}Widget::~Widget()
{delete ui;
}
4. 執行程序,觀察效果
3.2 -> 帶有快捷鍵的按鈕
1. 在界面中拖五個按鈕
五個按鈕的 objectName 分別為?pushButton_target、pushButton_down、pushButton_up、pushButton_left、pushButton_right。
五個按鈕的初始位置隨意,文本內容均清空。
2. 創建 resource.qrc,并導入 5 張圖片
3. 修改 widget.cpp,設置圖標資源和快捷鍵
- 使用 setShortcut 給按鈕設置快捷鍵。參數是一個 QKeySequence 對象。表示一個按鍵序列。支持組合鍵(類似 ctrl + c 這種)。
- QKeySequence 的構造函數參數,可以直接使用 “ctrl + c” 這樣的按鍵名字符串表示,也可以使用預定義好的常量(形如 Qt::CTRL + Qt::Key_C)表示。
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 設置按鈕圖標ui->pushButton_target->setIcon(QIcon(":/image/Science.png"));ui->pushButton_target->setIconSize(QSize(50, 50));ui->pushButton_up->setIcon(QIcon(":/image/up.png"));ui->pushButton_up->setIconSize(QSize(50, 50));ui->pushButton_down->setIcon(QIcon(":/image/down.png"));ui->pushButton_down->setIconSize(QSize(50, 50));ui->pushButton_left->setIcon(QIcon(":/image/left.png"));ui->pushButton_left->setIconSize(QSize(50, 50));ui->pushButton_right->setIcon(QIcon(":/image/right.png"));ui->pushButton_right->setIconSize(QSize(50, 50));// 直接通過按鍵的名字來設置. 雖然簡單, 但是容易寫錯// ui->pushButton_up->setShortcut(QKeySequence("ctrl + w"));// ui->pushButton_down->setShortcut(QKeySequence("s"));// ui->pushButton_left->setShortcut(QKeySequence("a"));// ui->pushButton_right->setShortcut(QKeySequence("d"));// 還可以通過按鍵的枚舉來設置按鍵快捷鍵// ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));}Widget::~Widget()
{delete ui;
}
4. 修改 widget.cpp,設置四個方向鍵的 slot 函數
void Widget::on_pushButton_up_clicked()
{// 獲取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 設置新的位置ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}void Widget::on_pushButton_down_clicked()
{// 獲取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 設置新的位置ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}void Widget::on_pushButton_left_clicked()
{// 獲取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 設置新的位置ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}void Widget::on_pushButton_right_clicked()
{// 獲取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 設置新的位置ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}
5. 運行程序,此時點擊按鈕,或者使用 wsad 均可以讓其移動
通過以上代碼,按住快捷鍵,確實可以進行重復觸發。但是鼠標點擊卻不能。
修改 widget.cpp,在構造函數中開啟重復觸發。
// 開啟鼠標點擊的連發功能(鍵盤的連發默認就是支持的)ui->pushButton_up->setAutoRepeat(true);ui->pushButton_down->setAutoRepeat(true);ui->pushButton_left->setAutoRepeat(true);ui->pushButton_right->setAutoRepeat(true);
此時,按住鼠標時,可以讓其連續移動。
4 -> 總結
QPushButton 作為 Qt 框架中最基礎的交互控件之一,體現了 Qt 設計哲學的核心原則:功能豐富性、跨平臺一致性和用戶友好性。它不僅僅是一個簡單的點擊區域,而是一個完整的交互系統,包含了狀態管理、視覺反饋、無障礙訪問等綜合特性。
理解 PushButton 的完整特性集有助于我們創建出更直觀、更易用且符合現代設計標準的應用程序界面。其靈活的自定義能力和豐富的功能選項使其能夠適應從傳統桌面應用到現代扁平化設計的各種界面需求,是 Qt開發者 工具箱中不可或缺的重要組件。
?
感謝各位大佬支持!!!
互三啦!!!