qt QToolButton使用总结
- QToolButton 是 Qt 中用于工具栏的专用按钮控件,支持图标、文本、下拉菜单、可切换状态等功能,适用于工具类操作。
1. 基本特性
与 QPushButton 的区别:
-
更轻量级,专为工具栏设计。
-
支持下拉菜单(setMenu())、自动提升(autoRaise)和多种显示模式(toolButtonStyle)。
-
可设置为可切换状态(setCheckable(true))。
2. 常用方法
设置图标和文本:
toolButton->setIcon(QIcon(":/icon.png"));
toolButton->setText("Tool");
显示模式(Qt::ToolButtonStyle):
toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); // 图标下方显示文本
- 可选值:IconOnly、TextOnly、TextBesideIcon、TextUnderIcon。
下拉菜单:
QMenu *menu = new QMenu;
menu->addAction("Option");
toolButton->setMenu(menu);
toolButton->setPopupMode(QToolButton::MenuButtonPopup); // 菜单触发模式
-
弹出模式:
-
InstantPopup:点击立即弹出菜单。
-
MenuButtonPopup:显示菜单按钮,点击右侧箭头弹出。
-
DelayedPopup:长按后弹出(默认)。
下箭头类型:
toolButton->setArrowType(Qt::RightArrow); // 显示右箭头
可切换状态:
toolButton->setCheckable(true); // 按钮可保持按下/释放状态
自动提升(autoRaise):
toolButton->setAutoRaise(true); // 无边框,悬停时凸起
3. 信号与槽
- 点击事件:
connect(toolButton, &QToolButton::clicked, this, &MyClass::handleClick);
- 切换状态(可检查按钮):
connect(toolButton, &QToolButton::toggled, this, &MyClass::handleToggle);
4. 与 QToolBar 配合
- 添加到工具栏:
QToolBar *toolBar = new QToolBar;
toolBar->addWidget(toolButton); // 直接添加控件
// 或通过 QAction 添加
QAction *action = new QAction("Save", this);
toolBar->addAction(action); // 自动生成 QToolButton
5. 样式自定义
- 使用样式表:
toolButton->setStyleSheet(
"QToolButton { border: 1px solid gray; }"
"QToolButton::menu-button { background: lightgray; }"
);
---
### 6. 示例代码
~~~c++
QToolButton *btn = new QToolButton;
btn->setIcon(QIcon(":/save.png"));
btn->setText("Save");
btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
btn->setCheckable(true);
QMenu *menu = new QMenu;
menu->addAction("Save As");
btn->setMenu(menu);
btn->setPopupMode(QToolButton::MenuButtonPopup);
connect(btn, &QToolButton::clicked, this, &MyClass::save);
7. 常见场景
-
绘图软件中的工具切换(如画笔、橡皮擦)。
-
带下拉选项的按钮(如“保存”按钮包含“另存为”)。
-
可切换状态的工具(如粗体/斜体)。
8. 注意事项
-
父容器(如 QToolBar)可能覆盖 toolButtonStyle,需在容器中统一设置。
-
使用 QAction 管理按钮状态(图标、文本、快捷键)更高效。
-
不同平台的默认样式可能不同,建议用样式表统一外观。
- 通过合理使用 QToolButton,可以创建专业且用户友好的工具栏界面。