QAbstractButton
QAbstractButton 类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括标准按钮 QPushButton、工具按钮 QToolButton、复选框 QCheckBox和单选按钮 QRadioButton 等。
QPushButton
QPushButton 提供了创建交互按钮的基本功能。它可以包含文本、图标等,并能够发射各种信号,使得开发者可以轻松地实现按钮的交互行为。
#include <QApplication>
#include <QPushButton>
#include <QMessageBox>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QPushButton btn;// 设置文本btn.setText("按钮");btn.show();// 连接信号槽点击后弹出对话框QObject::connect(&btn, &QPushButton::clicked, []() {QMessageBox::information(nullptr, "Clicked", "button clicked!");});return a.exec();
}
QToolButton
QToolButton 是一种特殊的按钮,可以快速访问特定的命令或选项。与普通的命令按钮不同,工具按钮通常不显示文本标签(不代表不能),而是显示图标。当使用 QToolBar::addAction() 创建新的 QAction 实例或使用 QToolBar::addActions() 将现有操作添加到工具栏时,通常使用 QToolButton。
#include <QApplication>
#include <QHBoxLayout>
#include <QToolButton>
#include <QMenu>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget w;QToolButton btn1;// 设置箭头类型btn1.setArrowType(Qt::DownArrow);// 设置按钮是否自动突出,默认为 falsebtn1.setAutoRaise(true);QToolButton btn2;btn2.setArrowType(Qt::LeftArrow);QToolButton btn3;// 设置文本btn3.setText("查看");// 设置图标btn3.setIcon(QIcon("C:\\Users\\yxc\\Pictures\\Camera Roll\\discord_midjourney_9_.png"));// 设置样式btn3.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);QToolButton btn4;// 设置菜单弹出方式(默认QToolButton::DelayedPopup按一会再弹出)btn4.setPopupMode(QToolButton::InstantPopup);// 添加菜单QMenu menu;menu.addAction("剪切");menu.addAction("粘贴");menu.addAction("复制");btn4.setMenu(&menu);QHBoxLayout layout;layout.addWidget(&btn1);layout.addWidget(&btn2);layout.addWidget(&btn3);layout.addWidget(&btn4);w.setLayout(&layout);w.show();return a.exec();
}
QToolButton 的样式:
常量 | 描述 |
---|---|
Qt::ToolButtonIconOnly | 只显示图标 |
Qt::ToolButtonTextOnly | 只显示文本 |
Qt::ToolButtonTextBesideIcon | 文本显示在图标旁边 |
Qt::ToolButtonTextUnderIcon | 文本显示在图标下方 |
Qt::ToolButtonFollowStyle | 根据QStyle::StyleHint格式显示 |
QCheckBox
QCheckBox 是一个选项按钮,可以打开(选中)或关闭(未选中)。如果复选框被选中,再次点击这个按钮选中状态会被取消。。复选框通常会向用户提供“多选多”的选择。然而复选框也可以实现“多选一”。例如:QButtonGroup可用于对复选按钮进行逻辑分组(QButtonGroup不提供任何视觉表示),从而允许使用独占复选框。
下图进一步说明了独占和非独占复选框之间的区别(将两种复选框放在了两个QGroupBox容器中):
实现独占需要设置 autoExclusive 属性为 true。
Qt::CheckState类型:
常量 | 描述 |
---|---|
Qt::Unchecked | 未选中 |
Qt::PartiallyChecked | 半选中 |
Qt::Checked | 选中 |
QCheckBox 默认是两种选中状态,选中和未选中,setTristate(true)用来开启半选中状态。
#include <QApplication>
#include <QWidget>
#include <QCheckBox>
#include <QVBoxLayout>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget w;// 垂直布局(暂时先使用,后面会仔细学习)QVBoxLayout layout(&w);// 添加复选框QCheckBox chkBox1;chkBox1.setText("语文");QCheckBox chkBox2;chkBox2.setText("数学");chkBox2.setChecked(true);QCheckBox chkBox3;chkBox3.setText("英语");chkBox3.setTristate(true);chkBox3.setCheckState(Qt::PartiallyChecked);layout.addWidget(&chkBox1);layout.addWidget(&chkBox2);layout.addWidget(&chkBox3);w.show();return a.exec();
}
QRadioButton
QRadioButton 是一个选项按钮,可以打开(选中)或关闭(未选中)。单选按钮通常会向用户提供“多选一”的选择。如果用户选择了另一个按钮,则先前选择的按钮将关闭。如果单选按钮被选中,再次点击这个按钮选中状态是不能被取消的。这是与 QCheckBox 的不同点
#include <QApplication>#include "widget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
运行结果如图所示:
如果我们使用鼠标点击了某个单选按钮,其他按钮将取消选中。