目录
1.1 Push Button
1.2 Radio Buttion
1.3 Check Box
1.4 Tool Button
1.5 小结
1.1 Push Button
在 Qt Designer 中也能够看到这⾥的继承关系.
QAbstractButton中 和 QPushButton 相关性较⼤的属性
1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性.2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使⽤ text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.
- 事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
- 其中 default 和 audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注.
代码⽰例: 带有图标的按钮
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建图标
QIcon icon(":/doge.png");
// 设置图标
ui->pushButton->setIcon(icon);
// 设置图标⼤⼩
ui->pushButton->setIconSize(QSize(50, 50));
}
代码⽰例: 带有快捷键的按钮
- 五个按钮的 objectName 分别为 pushButton_target , pushButton_up ,
- pushButton_down , pushButton_left , pushButton_right
- 五个按钮的初始位置随意, 其中 pushButton_target 尺⼨设置为 100 * 100, 其余按钮设为 50 *
- 50. ⽂本内容均清空
- 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀ 持组合键 (ctrl + c 这种).
- QKeySequence 的构造函数参数, 可以直接使⽤ "ctrl+c" 这样的按键名字符串表⽰, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示.
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置图标
ui->pushButton_target->setIcon(QIcon(":/dog.png"));
ui->pushButton_target->setIconSize(QSize(100, 100));
ui->pushButton_up->setIcon(QIcon(":/caret-up.png"));
ui->pushButton_down->setIcon(QIcon(":/caret-down.png"));
ui->pushButton_left->setIcon(QIcon(":/caret-left.png"));
ui->pushButton_right->setIcon(QIcon(":/caret-right.png"));
// 设置快捷键
ui->pushButton_up->setShortcut(QKeySequence("w"));
ui->pushButton_down->setShortcut(QKeySequence("s"));
ui->pushButton_left->setShortcut(QKeySequence("a"));
ui->pushButton_right->setShortcut(QKeySequence("d"));
// 设置快捷键也可以写作
// ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
// ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
// ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
// ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));
}
void Widget::on_pushButton_up_clicked()
{
const QRect& rect = ui->pushButton_target->geometry();
ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(),
rect.height());
qDebug() << "up";
}
void Widget::on_pushButton_down_clicked()
{
const QRect& rect = ui->pushButton_target->geometry();
ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(),
rect.height());
qDebug() << "down";
}
void Widget::on_pushButton_left_clicked()
{
const QRect& rect = ui->pushButton_target->geometry();
ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(),
rect.height());
qDebug() << "left";
}
void Widget::on_pushButton_right_clicked()
{
const QRect& rect = ui->pushButton_target->geometry();
ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(),
rect.height());
qDebug() << "right";
}
1.2 Radio Buttion
QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个
- 作为 QAbstractButton 和 QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton同样适⽤.
QAbstractButton 中和 QRadioButton 关系较⼤的属性
代码⽰例: 选择性别
- 设置的⽂本如下图. 3 个单选按钮的 objectName 分别为 radioButton_male, radioButton_female , radioButton_other
2) 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数
void Widget::on_radioButton_male_clicked()
{
ui->label->setText("你选择的性别为: 男");
}
void Widget::on_radioButton_female_clicked()
{
ui->label->setText("你选择的性别为: ⼥");
}
void Widget::on_radioButton_other_clicked()
{
ui->label->setText("你选择的性别为: 其他");
}
4) 当前代码中, 如果程序启动, 则不会选择任何选项.
- 可以修改代码, 让程序启动默认选中性别男
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置默认选中该按钮
ui->radioButton_male->setChecked(true);
ui->label->setText("你选择的性别为: 男");
}
- 此时运⾏程序, 即可看到 性别男 已经被选中了
- 修改 widget.cpp 的构造函数
// 禁⽤ other 选项
ui->radioButton_other->setCheckable(false);
- 运⾏程序, 可以看到, 点击 "其他" 按钮的时候, 虽然不会被选中, 但是可以触发点击事件, 使上⾯的 label 显⽰性别为其他.
使⽤ setEnabled 是更彻底的禁⽤按钮的⽅式. 此时该按钮⽆法被选中, 也⽆法响应任何输⼊
// 禁⽤ other 选项
ui->radioButton_other->setEnabled(false);
1.3 Check Box
QCheckBox 表⽰复选按钮. 可以允许选中多个.
- 和 QCheckBox 最相关的属性也是 checkable 和 checked , 都是继承⾃QAbstractButton .
- ⾄于 QCheckBox 独有的属性 tristate ⽤来实现 "三态复选框" . 这个东西⽐较冷⻔, 咱们不 做讨论
代码⽰例: 获取复选按钮的取值
- objectName 分别为 checkBox_eat , checkBox_sleep , checkBox_play , 以及pushButton
2) 给 pushButton 添加 slot 函数
void Widget::on_pushButton_clicked()
{
QString result;
if (ui->checkBox_eat->isChecked()) {
result += ui->checkBox_eat->text();
}
if (ui->checkBox_sleep->isChecked()) {
result += ui->checkBox_sleep->text();
}
if (ui->checkBox_play->isChecked()) {
result += ui->checkBox_play->text();
}
qDebug() << "选中的内容: " << result;
}
1.4 Tool Button
1.5 小结
按钮类控件在用户界面开发中扮演着重要的角色,主要用于触发特定的操作或事件。以下是关于按钮类控件的小结:
-
QPushButton:
- 用途:常用的按钮控件,用于触发各种操作。
- 特点:可以显示文本和图标,支持样式表定制,发出
clicked()
信号响应用户点击。
-
QToolButton:
- 用途:工具按钮控件,通常用于工具栏、菜单栏等。
- 特点:支持文本和图标显示,可以设置弹出菜单或下拉菜单,可以作为常规按钮或复选按钮使用。
-
QRadioButton:
- 用途:单选按钮控件,用于在一组选项中选择一个。
- 特点:显示一个圆形按钮,可以与其他单选按钮分组,只能选择其中的一个。
-
QCheckBox:
- 用途:复选框控件,用于允许用户选择一个或多个选项。
- 特点:显示一个方形按钮,可以选中或取消选中,支持与其他复选框独立使用。
-
QAbstractButton(抽象按钮类):
- 用途:按钮类控件的抽象基类,不直接使用,而是作为其他按钮类的基类。
- 特点:定义了按钮类的通用行为和接口,如按下状态、点击信号等。
这些按钮类控件都提供了丰富的功能和灵活的定制选项,开发者可以根据实际需求选择合适的按钮类型来构建用户界面。