Qt Widgets模块功能详细说明,基本控件:QPushButton(二)
一、基本控件(Widgets)
Qt 提供了丰富的基本控件,如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。
1、QPushButton
1.1、概述 (用途、继承关系)
QPushButton 是 Qt 框架中用于创建按钮的控件,它的主要功能是响应用户点击,触发特定操作,例如提交表单、打开窗口或执行命令。
继承关系
QPushButton 继承自以下类(基于 Qt 的 C++ 继承链):
-
QAbstractButton:提供按钮的通用功能(如点击、按下、释放、复选等)。
-
QWidget:提供基本窗口部件功能(如大小、位置、事件处理)。
-
QObject:提供信号与槽机制、事件系统等。
1.2、常用属性 (文本、图标、是否可用、是否选中等)
-
文本 (text)
-
描述:按钮上显示的文本内容。
-
获取/设置:button.text() / button.setText("文本")。
-
示例:button.setText("点击我")。
-
-
图标 (icon)
-
描述:按钮上显示的图标,支持多种图片格式(如 PNG、JPG)。
-
获取/设置:button.icon() / button.setIcon(QIcon("path/to/icon.png"))。
-
示例:button.setIcon(QIcon("icon.png"))。
-
-
是否可用 (enabled)
-
描述:控制按钮是否可交互。禁用时按钮变灰,无法点击。
-
获取/设置:button.isEnabled() / button.setEnabled(False)。
-
示例:button.setEnabled(False) 禁用按钮。
-
-
是否选中 (checked)
-
描述:当按钮设置为可切换(checkable)时,控制选中状态。
-
获取/设置:button.isChecked() / button.setChecked(True)。
-
前提:需设置 button.setCheckable(True)。
-
示例:button.setCheckable(True); button.setChecked(True)。
-
-
快捷键 (shortcut)
-
描述:为按钮绑定键盘快捷键,按下快捷键等同于点击按钮。
-
设置:button.setShortcut("Ctrl+S")。
-
示例:button.setShortcut("Enter")。
-
-
默认按钮 (default)
-
描述:设置为窗口的默认按钮,按 Enter 键时自动触发。
-
设置:button.setDefault(True)。
-
-
自动重复 (autoRepeat)
-
描述:长按按钮时是否重复触发点击事件。
-
设置:button.setAutoRepeat(True)。
-
-
工具提示 (toolTip)
-
描述:鼠标悬停时显示的提示文本。
-
设置:button.setToolTip("这是一个按钮")。
-
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QIcon>
#include <QDebug> // 用于输出调试信息int main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建主窗口QMainWindow mainWindow;mainWindow.setWindowTitle("QPushButton 属性示例");// 创建中心 widget 和布局QWidget *centralWidget = new QWidget(&mainWindow);QVBoxLayout *layout = new QVBoxLayout(centralWidget);//===========================// 1. 创建一个 QPushButton//===========================QPushButton *button = new QPushButton(centralWidget);//==============================// 2. 设置文本 (text)//==============================button->setText("点击我");//=========================// 3. 设置图标 (icon)//=========================button->setIcon(QIcon(":/images/save.png"));button->setIconSize(QSize(24, 24)); // 设置图标大小,可选//==================================// 4. 设置是否可用 (enabled)//==================================button->setEnabled(true); // 默认是可用的,这里显式设置// button->setEnabled(false); // 禁用按钮的示例//==================================================// 5. 设置是否选中 (checked) - 需要先设置为可切换//==================================================button->setCheckable(true);button->setChecked(false); // 默认不选中// button->setChecked(true); // 设置为选中状态的示例// 连接 checked() 信号到一个槽函数,用于演示选中状态的变化QObject::connect(button, &QPushButton::clicked, [](bool checked){qDebug() << "按钮选中状态改变:" << checked;});//====================================// 6. 设置快捷键 (shortcut)//====================================button->setShortcut(QKeySequence("Ctrl+S")); // 设置 Ctrl+S 为快捷键// button->setShortcut(QKeySequence(Qt::Key_Return)); // 设置 Enter 键为快捷键// 连接 clicked() 信号到一个槽函数,用于演示快捷键触发QObject::connect(button, &QPushButton::clicked, [](){qDebug() << "按钮被点击或通过快捷键触发!";});//====================================// 7. 设置默认按钮 (default)//====================================// 通常在对话框中使用,按 Enter 键时触发// 在主窗口中,默认按钮的行为可能不明显,但在 QDialog 中很重要。button->setDefault(false); // 默认不是默认按钮// button->setDefault(true); // 设置为默认按钮的示例//================================// 8. 设置自动重复 (autoRepeat)//================================
// button->setAutoRepeat(false); // 默认不自动重复button->setAutoRepeat(true); // 设置为自动重复的示例//==============================// 9. 设置工具提示 (toolTip)//=============================button->setToolTip("这是一个非常有用的按钮");// 将按钮添加到布局layout->addWidget(button);// 设置中心 widgetmainWindow.setCentralWidget(centralWidget);// 显示主窗口mainWindow.show();return a.exec();
}
1.3、常用方法 (点击模拟、设置文本、设置图标等)
-
点击模拟
-
click():模拟用户点击按钮,触发 clicked 信号。
-
示例:button.click()。
-
-
设置文本
-
setText(str):设置按钮的显示文本。
-
示例:button.setText("确认")。
-
-
设置图标
-
setIcon(QIcon):设置按钮图标。
-
示例:button.setIcon(QIcon("icon.png"))。
-
-
设置图标大小
-
setIconSize(QSize):设置图标的显示大小。
-
示例:button.setIconSize(QSize(32, 32))。
-
-
设置是否可切换
-
setCheckable(bool):设置按钮是否具有复选(开关)功能。
-
示例:button.setCheckable(True)。
-
-
设置选中状态
-
setChecked(bool):设置按钮的选中状态(需先设为可切换)。
-
示例:button.setChecked(True)。
-
-
设置快捷键
-
setShortcut(str):为按钮绑定快捷键。
-
示例:button.setShortcut("Ctrl+Q")。
-
-
设置默认按钮
-
setDefault(bool):将按钮设为默认按钮。
-
示例:button.setDefault(True)。
-
1.4、常用信号 (点击、按下、释放、切换状态等)
-
clicked(bool)
-
触发时机:按钮被点击时。
-
参数:如果按钮是可切换的,参数为 checked 状态(True/False)。
-
示例:connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
-
-
pressed()
-
触发时机:按钮被按下时(鼠标按下但未释放)。
-
示例:connect(button, &QPushButton::pressed, this, &MainWindow::onButtonPressed);
-
-
released()
-
触发时机:按钮被释放时(鼠标按下后释放)。
-
示例:connect(button, &QPushButton::released, this, &MainWindow::onButtonReleased);
-
-
toggled(bool)
-
触发时机:当按钮是可切换的(checkable=True)且选中状态改变时。
-
参数:当前选中状态(True/False)。
-
示例:connect(button, &QPushButton::toggled, this, &MainWindow::onButtonToggled);
-
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QDebug> // 用于输出调试信息class MyWindow : public QMainWindow
{Q_OBJECT // 需要这个宏来使用信号和槽public:MyWindow(QWidget *parent = nullptr) : QMainWindow(parent){setWindowTitle("QPushButton 信号示例");QWidget *centralWidget = new QWidget(this);QVBoxLayout *layout = new QVBoxLayout(centralWidget);QPushButton *button = new QPushButton("测试按钮", centralWidget);//=================================================// 设置按钮为可切换,以便演示 toggled 信号//=================================================button->setCheckable(true);//==============================================// 连接 clicked(bool) 信号//==============================================// 如果按钮可切换,clicked 信号会带一个 bool 参数表示是否选中// 如果按钮不可切换,clicked 信号不带参数,但这里使用带 bool 参数的重载也兼容connect(button, &QPushButton::clicked, this, &MyWindow::onButtonClicked);//===================================// 连接 pressed() 信号//===================================connect(button, &QPushButton::pressed, this, &MyWindow::onButtonPressed);//===================================// 连接 released() 信号//===================================connect(button, &QPushButton::released, this, &MyWindow::onButtonReleased);//======================================================// 连接 toggled(bool) 信号 (仅在按钮可切换时触发)//======================================================connect(button, &QPushButton::toggled, this, &MyWindow::onButtonToggled);layout->addWidget(button);centralWidget->setLayout(layout);setCentralWidget(centralWidget);}private slots:// 槽函数用于处理 clicked 信号void onButtonClicked(bool checked){qDebug() << "Clicked Signal! Checked state:" << checked;}// 槽函数用于处理 pressed 信号void onButtonPressed(){qDebug() << "Pressed Signal!";}// 槽函数用于处理 released 信号void onButtonReleased(){qDebug() << "Released Signal!";}// 槽函数用于处理 toggled 信号void onButtonToggled(bool checked){qDebug() << "Toggled Signal! New checked state:" << checked;}
};#include "main.moc" // 如果你将 MyWindow 类放在 main.cpp 中,需要包含这个文件int main(int argc, char *argv[])
{QApplication a(argc, argv);MyWindow window;window.show();return a.exec();
}
1.5、样式表应用
QPushButton 支持使用 Qt 样式表 (QSS) 自定义外观,类似于 CSS。
-
background-color:设置背景颜色。
-
border-radius:设置圆角。
-
padding:设置内边距。
-
:hover、:pressed、:disabled、:checked:伪类选择器,分别对应鼠标悬停、按下、禁用和选中状态。
基本样式:默认样式、悬停样式、按下样式、不可用样式
button->setStyleSheet("QPushButton {"" background-color: #4CAF50;"" color: white;"" border-radius: 5px;"" padding: 6px;"" font-size: 14px;""}""QPushButton:hover {"" background-color: #45a049;""}""QPushButton:pressed {"" background-color: #3d8b40;""}""QPushButton:disabled {"" background-color: #cccccc;"" color: #666666;""}"
);
带图标的按钮样式
button->setStyleSheet("QPushButton {"" icon-size: 24px;"" padding-left: 30px;" /* 为图标留空间 */" text-align: left;""}"
);
开关按钮样式
button->setStyleSheet("QPushButton {"" background-color: #cccccc;"" border: 1px solid #aaaaaa;""}""QPushButton:checked {"" background-color: #4CAF50;"" border: 1px solid #3d8b40;""}"
);
2、QToolButton
2.1、概述 (用途、与 QPushButton 的区别、继承关系)
QToolButton 是 Qt 框架中的一种按钮控件,主要用于工具栏(QToolBar)或需要紧凑、图标驱动的界面元素。它通常用于提供快速访问的功能,例如工具栏中的“保存”、“撤销”或“设置”等操作。
2.1.1、与 QPushButton 的区别
-
用途与外观:
-
QPushButton 是一个通用按钮,通常显示文本或简单的图标,适合对话框或表单。
-
QToolButton 专为工具栏设计,默认以图标为主,文本为辅,支持更复杂的交互(如弹出菜单、箭头指示)。
-
-
大小与布局:
-
QToolButton 默认更小巧,适合工具栏的紧凑布局。
-
QPushButton 通常更大,适合独立按钮或表单布局。
-
-
功能支持:
-
QToolButton 支持弹出菜单、箭头类型、工具提示等,适合工具栏的动态交互。
-
QPushButton 功能更简单,主要是点击触发操作。
-
-
默认行为:
-
QToolButton 默认没有边框,适合工具栏的无缝风格。
-
QPushButton 默认有边框和背景,视觉上更突出。
-
2.1.2、继承关系
QToolButton 继承自以下类(基于 Qt 的 C++ 继承链):
-
QAbstractButton:提供按钮的通用功能(如点击、按下、释放、复选等)。
-
QWidget:提供基本窗口部件功能(如大小、位置、事件处理)。
-
QObject:提供信号与槽机制、事件系统等。
QToolButton 继承了 QAbstractButton 的所有基本按钮功能(如点击、切换、文本设置等),并扩展了工具栏特定的功能。
2.2、常用属性 (图标、文本、箭头类型、弹出模式等)
ToolButton 提供多种属性,用于控制其外观和行为。
-
图标(icon):
-
属性:icon(类型:QIcon)
-
描述:设置按钮的图标,通常是工具栏按钮的主要视觉元素。
-
示例:toolButton->setIcon(QIcon(":/icons/save.png"));
-
-
文本(text):
-
属性:text(类型:QString)
-
描述:设置按钮的显示文本,通常在图标下方或旁边显示。
-
示例:toolButton->setText("Save");
-
-
工具按钮样式(toolButtonStyle):
-
属性:toolButtonStyle(类型:Qt::ToolButtonStyle)
-
描述:控制图标和文本的显示方式,支持以下枚举值:
-
Qt::ToolButtonIconOnly:仅显示图标(默认)。
-
Qt::ToolButtonTextOnly:仅显示文本。
-
Qt::ToolButtonTextBesideIcon:文本在图标旁边。
-
Qt::ToolButtonTextUnderIcon:文本在图标下方。
-
Qt::ToolButtonFollowStyle:遵循系统样式。
-
-
示例:toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
-
-
箭头类型(arrowType):
-
属性:arrowType(类型:Qt::ArrowType)
-
描述:设置按钮是否显示箭头以及箭头方向,用于指示弹出菜单或特定状态。支持:
-
Qt::NoArrow:无箭头(默认)。
-
Qt::UpArrow、Qt::DownArrow、Qt::LeftArrow、Qt::RightArrow:显示指定方向的箭头。
-
-
示例:toolButton->setArrowType(Qt::DownArrow);
-
-
弹出模式(popupMode):
-
属性:popupMode(类型:QToolButton::ToolButtonPopupMode)
-
描述:定义按钮关联菜单的弹出行为,支持以下模式:
-
QToolButton::DelayedPopup:长按后弹出菜单(默认)。
-
QToolButton::MenuButtonPopup:点击箭头部分弹出菜单,点击图标触发默认动作。
-
QToolButton::InstantPopup:点击按钮立即弹出菜单。
-
-
示例:toolButton->setPopupMode(QToolButton::MenuButtonPopup);
-
-
自动升起(autoRaise):
-
属性:autoRaise(类型:bool)
-
描述:启用时,按钮在未按下时呈现“平面”外观,鼠标悬停时升起,适合工具栏风格。默认开启。
-
示例:toolButton->setAutoRaise(true);
-
-
工具提示(toolTip):
-
属性:toolTip(类型:QString)
-
描述:设置鼠标悬停时的提示文本。
-
示例:toolButton->setToolTip("Save the document");
-
-
启用状态(enabled):
-
属性:enabled(类型:bool)
-
描述:控制按钮是否可交互,禁用时呈灰色。
-
示例:toolButton->setEnabled(false);
-
#include <QApplication>
#include <QMainWindow>
#include <QToolButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QIcon>
#include <QMenu>
#include <QDebug> // 用于输出调试信息int main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建主窗口QMainWindow mainWindow;mainWindow.setWindowTitle("QToolButton 属性示例");// 创建中心 widget 和布局QWidget *centralWidget = new QWidget(&mainWindow);QVBoxLayout *layout = new QVBoxLayout(centralWidget);// 创建一个 QToolButtonQToolButton *toolButton = new QToolButton(centralWidget);//=============================// 1. 设置图标 (setIcon)//=============================toolButton->setIcon(QIcon(":/images/save.png"));toolButton->setIconSize(QSize(32, 32)); // 可选:设置图标大小//================================// 2. 设置文本 (setText)//================================toolButton->setText("保存");//==============================================// 3. 设置工具按钮样式 (setToolButtonStyle)//==============================================toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 文本在图标下方// 尝试其他样式:// toolButton->setToolButtonStyle(Qt::ToolButtonIconOnly); // 仅图标 (默认)// toolButton->setToolButtonStyle(Qt::ToolButtonTextOnly); // 仅文本// toolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); // 文本在图标旁边// toolButton->setToolButtonStyle(Qt::ToolButtonFollowStyle); // 遵循系统样式//=============================================// 4. 设置箭头类型 (setArrowType)//=============================================//toolButton->setArrowType(Qt::DownArrow); // 显示向下箭头,图标冲突// 尝试其他箭头类型:toolButton->setArrowType(Qt::NoArrow); // 无箭头 (默认)// toolButton->setArrowType(Qt::UpArrow); // 向上箭头// toolButton->setArrowType(Qt::LeftArrow); // 向左箭头// toolButton->setArrowType(Qt::RightArrow); // 向右箭头//====================================================// 5. 设置弹出模式 (setPopupMode) - 需要关联一个菜单//====================================================QMenu *menu = new QMenu(toolButton);menu->addAction("动作一");menu->addAction("动作二");toolButton->setMenu(menu); // 关联菜单toolButton->setPopupMode(QToolButton::MenuButtonPopup); // 点击箭头弹出菜单// 尝试其他弹出模式:// toolButton->setPopupMode(QToolButton::DelayedPopup); // 长按弹出菜单 (默认)// toolButton->setPopupMode(QToolButton::InstantPopup); // 点击按钮立即弹出菜单// 连接 clicked 信号,演示点击事件(在 MenuButtonPopup 模式下,点击图标区域触发)QObject::connect(toolButton, &QToolButton::clicked, [](){qDebug() << "QToolButton 被点击 (可能触发了默认动作)!";});//=====================================// 6. 设置自动升起 (setAutoRaise)//=====================================toolButton->setAutoRaise(true); // 默认开启,使其在工具栏中外观更协调//===========================================// 7. 设置工具提示 (setToolTip)//===========================================toolButton->setToolTip("保存当前文档");//=========================================// 8. 设置启用状态 (setEnabled)//=========================================toolButton->setEnabled(true); // 默认是可用的,这里显式设置// toolButton->setEnabled(false); // 禁用按钮的示例// 将工具按钮添加到布局layout->addWidget(toolButton);// 设置中心 widgetmainWindow.setCentralWidget(centralWidget);// 显示主窗口mainWindow.show();return a.exec();
}
效果:
2.3、常用方法 (设置图标、设置菜单等)
QToolButton 的常用方法,用于设置和控制按钮的行为。
-
设置图标:
-
方法:setIcon(const QIcon &icon)
-
描述:设置按钮的图标。
toolButton->setIcon(QIcon(":/icons/save.png"));
-
-
设置菜单:
-
方法:setMenu(QMenu *menu)
-
描述:为按钮关联一个弹出菜单。
QMenu *menu = new QMenu(toolButton); menu->addAction("Option 1"); menu->addAction("Option 2"); toolButton->setMenu(menu);
-
-
设置默认动作:
-
方法:setDefaultAction(QAction *action)
-
描述:将一个 QAction 与按钮绑定,自动同步动作的图标、文本、工具提示等。
QAction *action = new QAction(QIcon(":/icons/save.png"), "Save", toolButton); toolButton->setDefaultAction(action);
-
-
设置工具按钮样式:
-
方法:setToolButtonStyle(Qt::ToolButtonStyle style)
-
描述:设置图标和文本的显示方式。
toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
-
-
设置弹出模式:
-
方法:setPopupMode(ToolButtonPopupMode mode)
-
描述:(promised)设置菜单弹出模式。
toolButton->setPopupMode(QToolButton::InstantPopup);
-
-
显示/隐藏:
-
方法:show(), hide()
-
描述:控制按钮的可见性。
-
示例:toolButton->hide();
-
2.4、常用信号 (点击、菜单弹出等)
QToolButton 继承了 QAbstractButton 的信号,并添加了一些特定信号。常用信号包括:
-
clicked():
-
描述:按钮被点击时发出。
-
示例:
connect(toolButton, &QToolButton::clicked, this, &MyClass::onButtonClicked);
-
-
triggered(QAction *action):
-
描述:当按钮关联的菜单动作被触发时发出。
-
示例:
connect(toolButton, &QToolButton::triggered, this, &MyClass::onMenuActionTriggered);
-
-
pressed():
-
描述:按钮被按下时发出。
-
示例:
connect(toolButton, &QToolButton::pressed, this, &MyClass::onButtonPressed);
-
-
released():
-
描述:按钮被释放时发出。
-
示例:
connect(toolButton, &QToolButton::released, this, &MyClass::onButtonReleased);
-
2.5、样式表应用
QToolButton 支持 Qt 样式表(QSS)自定义外观。
自定义背景和边框:
toolButton->setStyleSheet("QToolButton {"" background-color: #4CAF50;"" border: 1px solid #388E3C;"" border-radius: 4px;"" padding: 5px;""}""QToolButton:hover {"" background-color: #45A049;""}""QToolButton:pressed {"" background-color: #3D8B40;""}"
);
自定义图标大小:
toolButton->setStyleSheet("QToolButton {"" icon-size: 32px;""}"
);
禁用状态样式:
toolButton->setStyleSheet("QToolButton:disabled {"" background-color: #CCCCCC;"" color: #666666;""}"
);
菜单箭头样式:
toolButton->setStyleSheet("QToolButton::menu-indicator {"" image: url(:/icons/arrow-down.png);"" width: 10px;"" height: 10px;""}"
);
2.6、应用示例
#include <QApplication>
#include <QMainWindow>
#include <QToolBar>
#include <QToolButton>
#include <QMenu>
#include <QMessageBox>
#include <QDebug>
#include <QTimer>class MainWindow : public QMainWindow {Q_OBJECT
public:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent), isDocumentSaved(true) {// 创建工具栏QToolBar *toolbar = new QToolBar("Main Toolbar", this);toolbar->setMovable(false); // 禁止拖动工具栏addToolBar(Qt::TopToolBarArea, toolbar);//=======================// 1. 保存按钮//=======================saveButton = new QToolButton(this);saveButton->setIcon(QIcon(":/images/save.png"));saveButton->setToolTip("Save File (Ctrl+S)");saveButton->setShortcut(QKeySequence("Ctrl+S"));saveButton->setToolButtonStyle(Qt::ToolButtonIconOnly);saveButton->setAutoRaise(true);connect(saveButton, &QToolButton::clicked, this, &MainWindow::onSaveClicked);toolbar->addWidget(saveButton);toolbar->addSeparator(); // 添加分隔符//=============================// 2. 格式选择按钮(带下拉菜单)//=============================formatButton = new QToolButton(this);formatButton->setIcon(QIcon(":/images/format.png"));formatButton->setText("Format");formatButton->setToolTip("Choose file format");formatButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);formatButton->setPopupMode(QToolButton::MenuButtonPopup);QMenu *formatMenu = new QMenu(this);formatMenu->addAction("PDF");formatMenu->addAction("DOCX");formatMenu->addAction("TXT");formatButton->setMenu(formatMenu);connect(formatButton, &QToolButton::triggered, this, &MainWindow::onFormatSelected);connect(formatButton, &QToolButton::clicked, this, &MainWindow::onFormatButtonClicked);toolbar->addWidget(formatButton);toolbar->addSeparator();//=================================// 3. 撤销按钮(动态启用/禁用)//=================================undoButton = new QToolButton(this);undoButton->setIcon(QIcon(":/images/undo.png"));undoButton->setToolTip("Undo (Ctrl+Z)");undoButton->setShortcut(QKeySequence("Ctrl+Z"));undoButton->setToolButtonStyle(Qt::ToolButtonIconOnly);undoButton->setEnabled(false); // 默认禁用connect(undoButton, &QToolButton::clicked, this, &MainWindow::onUndoClicked);toolbar->addWidget(undoButton);// 模拟文档编辑状态变化的定时器(仅用于演示)QTimer *timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &MainWindow::simulateDocumentChange);timer->start(5000); // 每5秒模拟文档变化}private slots:// 保存按钮点击void onSaveClicked() {isDocumentSaved = true;saveButton->setIcon(QIcon(":/images/saved.png")); // 更新图标QMessageBox::information(this, "Save", "File saved successfully!");}// 格式按钮点击(非菜单部分)void onFormatButtonClicked() {QMessageBox::information(this, "Format", "Default format action triggered!");}// 格式菜单选择void onFormatSelected(QAction *action) {QString format = action->text();QMessageBox::information(this, "Format", QString("Selected format: %1").arg(format));}// 撤销按钮点击void onUndoClicked() {QMessageBox::information(this, "Undo", "Undo action performed!");undoButton->setEnabled(false); // 撤销后禁用}// 模拟文档变化void simulateDocumentChange() {isDocumentSaved = false;saveButton->setIcon(QIcon(":/images/unsave.png")); // 更新为未保存图标undoButton->setEnabled(true); // 启用撤销按钮}private:QToolButton *saveButton;QToolButton *formatButton;QToolButton *undoButton;bool isDocumentSaved; // 模拟文档保存状态
};int main(int argc, char *argv[]) {QApplication app(argc, argv);// 设置全局样式表app.setStyleSheet("QToolButton {"" border: none;"" padding: 5px;""}""QToolButton:hover {"" background-color: #E0E0E0;""}""QToolButton:menu-indicator {"" width: 10px;"" height: 10px;""}");MainWindow window;window.resize(600, 400);window.show();return app.exec();
}#include "main.moc"
效果:
后续补充...
-
QCheckBox:复选框,支持选中/未选中状态。
-
QRadioButton:单选按钮,用于互斥选择。
-
QComboBox:下拉列表框,支持选择或编辑。
-
QLineEdit:单行文本输入框,支持验证和掩码。
-
QTextEdit:多行文本编辑器,支持富文本。
-
QPlainTextEdit:轻量级纯文本编辑器。
-
QSpinBox:整数输入框,带上下箭头。
-
QDoubleSpinBox:浮点数输入框。
-
QSlider:滑动条,用于选择数值范围。
-
QProgressBar:进度条,显示任务进度。
-
QDial:旋钮控件,用于调整数值。
-
QDateEdit、QTimeEdit、QDateTimeEdit:日期、时间或日期时间输入控件。
-
QCalendarWidget:日历控件,用于选择日期。
-
QGroupBox:分组框,用于组织控件。
-
QFrame:框架控件,支持边框和样式。
-
QTabWidget:选项卡控件,支持多页面切换。
-
QStackedWidget:堆叠控件,用于切换显示单个页面。
-
QToolBox:工具箱控件,类似折叠的选项卡。
二、高级控件(Advanced Widgets)
提供更复杂的功能,适合特定场景。
-
QListWidget:列表控件,支持多选和图标。
-
QTreeWidget:树形控件,显示分层数据。
-
QTableWidget:表格控件,支持单元格编辑。
-
QColumnView:列视图,适合分层数据浏览。
-
QDockWidget:可停靠窗口,支持浮动和拖动。
-
QMdiArea、QMdiSubWindow:多文档界面(MDI)区域和子窗口。
-
QTextBrowser:只读富文本浏览器,支持超链接。
-
QGraphicsView、QGraphicsScene:图形视图框架,用于2D图形和自定义场景(与Widgets结合使用)。
-
QOpenGLWidget:OpenGL渲染窗口,支持3D图形。
三、容器类(Containers)
用于组织和布局其他控件。
-
QWidget:所有控件的基类,提供基本窗口功能。
-
QMainWindow:主窗口类,提供菜单栏、工具栏和状态栏。
-
QDialog:对话框基类,支持模态和非模态。
-
QScrollArea:滚动区域,支持大型内容显示。
-
QSplitter:分割器,允许用户调整子控件大小。
-
QTabBar:选项卡栏,与QTabWidget配合使用。
四、布局管理(Layouts)
用于自动排列控件,适应窗口大小变化。
-
QHBoxLayout:水平布局。
-
QVBoxLayout:垂直布局。
-
QGridLayout:网格布局。
-
QFormLayout:表单布局,适合标签-输入对。
-
QStackedLayout:堆叠布局,显示单一控件。
-
QLayout:布局基类,提供通用布局功能。
五、菜单和工具栏(Menus and Toolbars)
用于创建应用程序的导航和交互功能。
-
QMenu:弹出菜单,支持子菜单和动作。
-
QMenuBar:菜单栏,位于主窗口顶部。
-
QToolBar:工具栏,支持可拖动和浮动。
-
QAction:动作抽象,表示菜单项、工具栏按钮等。
六、对话框(Dialogs)
预定义的对话框,用于常见任务。
-
QMessageBox:消息框,显示提示、警告或错误。
-
QInputDialog:输入对话框,获取用户输入。
-
QFileDialog:文件选择对话框。
-
QColorDialog:颜色选择对话框。
-
QFontDialog:字体选择对话框。
-
QProgressDialog:进度对话框,显示任务进度。
-
QErrorMessage:错误消息对话框,支持重复消息过滤。
七、事件和交互
支持用户交互和事件处理。
-
QEvent:事件基类,用于处理鼠标、键盘等事件。
-
QMouseEvent、QKeyEvent:鼠标和键盘事件。
-
QDrag、QDropEvent:拖放支持。
-
QGestureEvent:手势事件(如触摸设备)。
-
QActionEvent:动作触发事件。
八、样式和主题(Styles and Themes)
用于自定义控件外观。
-
QStyle:控件绘制基类,支持自定义样式。
-
QStyleFactory:创建平台特定样式(如Windows、Fusion)。
-
QStyleSheet:通过CSS-like语法自定义控件外观。
-
QPalette:颜色配置,用于控件主题。
九、其他功能
-
QApplication:应用程序类,管理全局设置和事件循环。
-
QClipboard:剪贴板操作,支持文本、图像等。
-
QDesktopWidget:访问屏幕信息(如分辨率)。
-
QSystemTrayIcon:系统托盘图标支持。
-
QStatusBar:状态栏,显示临时信息。
-
QWhatsThis:上下文帮助功能。
-
QToolTip:工具提示支持。
-
QAccessible:辅助功能支持,增强可访问性。
十、模型/视图支持
虽然主要由Qt Model/View模块处理,但Widgets中包含相关控件:
-
QListView、QTreeView、QTableView:基于模型的视图控件,与QAbstractItemModel配合使用。
十一、动画和效果
-
QPropertyAnimation:属性动画,用于控件动态效果。
-
QGraphicsEffect:图形效果,如阴影、模糊(与QGraphicsView结合)。
十二、国际化支持
-
QTranslator:支持界面多语言翻译。
-
QLocale:本地化支持,处理日期、数字格式等。