一、基本控件(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);
// 设置中心 widget
mainWindow.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);
// 创建一个 QToolButton
QToolButton *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);
// 设置中心 widget
mainWindow.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:本地化支持,处理日期、数字格式等。