当前位置: 首页 > news >正文

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:本地化支持,处理日期、数字格式等。

相关文章:

  • 数据脱敏-6种方案,你选哪种?
  • DockerFile实战
  • 护网行动——蓝队防守方案指南
  • 系分论文《论信息系统缓存的分析和应用》
  • AI日报 - 2025年05月19日
  • C++:⾯向对象的三⼤特性
  • TensorRT
  • 使用 Auto-Keras 进行自动化机器学习
  • 拓展运算符与数组解构赋值的区别
  • Vibe Coding:编程中的氛围与效率的艺术
  • java19
  • COCO数据集神经网络性能现状2025.5.18
  • React方向:react脚手架的使用
  • 单列集合——ArrayList,LinkedList,迭代器的底层原理和源码
  • 中山市东区信息学竞赛2025 题目解析
  • SAP集团内部公司间交易自动开票
  • SEO长尾词优化与提升路径
  • 8.1UDP点对点聊天小项目
  • Oc语言学习 —— Foundation框架总结
  • 系统架构设计(十三):虚拟机体系结构风格
  • 聚焦智能浪潮下的创业突围,“青年草坪创新创业湃对”走进北杨人工智能小镇
  • 最高法:依法惩治损害民营企业合法权益的串通投标行为
  • 家国万里·时光故事会|科学家伉俪,用玉米书写家国情怀
  • “80后”南京大学天文与空间科学学院教授施勇加盟西湖大学
  • 纽约市长称墨西哥海军帆船撞桥事故已致2人死亡
  • 光明日报社副总编辑薄洁萍调任求是杂志社副总编辑