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);
// 设置按钮是否自动突出,默认为 false
btn1.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();
}
运行结果如图所示:
如果我们使用鼠标点击了某个单选按钮,其他按钮将取消选中。