• 【Qt常用控件】—— 按钮类控件


    目录

    1.1 Push Button

    1.2 Radio Buttion

    1.3 Check Box

     1.4 Tool Button

    1.5 小结


    1.1 Push Button

    使⽤ QPushButton 表⽰⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
    QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.

    在 Qt Designer 中也能够看到这⾥的继承关系.

     QAbstractButton中 QPushButton 相关性较⼤的属性

    1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性.
    2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使
    text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.
    • 事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
    • 其中 default audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注.
    代码⽰例: 带有图标的按钮
    1) 创建 resource.qrc ⽂件, 并导入图片

    2) 在界面上创建⼀个按钮

    3) 修改 widget.cpp, 给按钮设置图标.
    1. Widget::Widget(QWidget *parent)
    2. : QWidget(parent)
    3. , ui(new Ui::Widget)
    4. {
    5. ui->setupUi(this);
    6. // 创建图标
    7. QIcon icon(":/doge.png");
    8. // 设置图标
    9. ui->pushButton->setIcon(icon);
    10. // 设置图标⼤⼩
    11. ui->pushButton->setIconSize(QSize(50, 50));
    12. }
    4) 执⾏程序, 观察效果


    代码⽰例: 带有快捷键的按钮

    1) 在界⾯中拖五个按钮.
    • 五个按钮的 objectName 分别为 pushButton_target , pushButton_up ,
    • pushButton_down , pushButton_left , pushButton_right
    • 五个按钮的初始位置随意, 其中 pushButton_target 尺⼨设置为 100 * 100, 其余按钮设为 50 *
    • 50. ⽂本内容均清空

    2) 创建 resource.qrc , 并导入5 个图⽚.

    3) 修改 widget.cpp, 设置图标资源和快捷键
    • 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀ 持组合键 (ctrl + c 这种).
    • QKeySequence 的构造函数参数, 可以直接使⽤ "ctrl+c" 这样的按键名字符串表⽰, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示.
    1. Widget::Widget(QWidget *parent)
    2. : QWidget(parent)
    3. , ui(new Ui::Widget)
    4. {
    5. ui->setupUi(this);
    6. // 设置图标
    7. ui->pushButton_target->setIcon(QIcon(":/dog.png"));
    8. ui->pushButton_target->setIconSize(QSize(100, 100));
    9. ui->pushButton_up->setIcon(QIcon(":/caret-up.png"));
    10. ui->pushButton_down->setIcon(QIcon(":/caret-down.png"));
    11. ui->pushButton_left->setIcon(QIcon(":/caret-left.png"));
    12. ui->pushButton_right->setIcon(QIcon(":/caret-right.png"));
    13. // 设置快捷键
    14. ui->pushButton_up->setShortcut(QKeySequence("w"));
    15. ui->pushButton_down->setShortcut(QKeySequence("s"));
    16. ui->pushButton_left->setShortcut(QKeySequence("a"));
    17. ui->pushButton_right->setShortcut(QKeySequence("d"));
    18. // 设置快捷键也可以写作
    19. // ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
    20. // ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
    21. // ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
    22. // ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));
    23. }
    4) 修改 widget.cpp, 设置四个⽅向键的 slot 函数.
    1. void Widget::on_pushButton_up_clicked()
    2. {
    3. const QRect& rect = ui->pushButton_target->geometry();
    4. ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(),
    5. rect.height());
    6. qDebug() << "up";
    7. }
    8. void Widget::on_pushButton_down_clicked()
    9. {
    10. const QRect& rect = ui->pushButton_target->geometry();
    11. ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(),
    12. rect.height());
    13. qDebug() << "down";
    14. }
    15. void Widget::on_pushButton_left_clicked()
    16. {
    17. const QRect& rect = ui->pushButton_target->geometry();
    18. ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(),
    19. rect.height());
    20. qDebug() << "left";
    21. }
    22. void Widget::on_pushButton_right_clicked()
    23. {
    24. const QRect& rect = ui->pushButton_target->geometry();
    25. ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(),
    26. rect.height());
    27. qDebug() << "right";
    28. }
    5) 运行程序, 此时点击按钮, 或者使用 wasd 均可让狗头移动.


    1.2 Radio Buttion

    QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个

    1. 作为 QAbstractButton QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton同样适⽤.

    QAbstractButton 中和 QRadioButton 关系较⼤的属性

    代码⽰例: 选择性别 

    1) 在界⾯上创建⼀个 label, 和 3 个 单选按钮
    • 设置的⽂本如下图. 3 个单选按钮的 objectName 分别为 radioButton_male, radioButton_female , radioButton_other

    2) 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数 

    1. void Widget::on_radioButton_male_clicked()
    2. {
    3. ui->label->setText("你选择的性别为: 男");
    4. }
    5. void Widget::on_radioButton_female_clicked()
    6. {
    7. ui->label->setText("你选择的性别为: ⼥");
    8. }
    9. void Widget::on_radioButton_other_clicked()
    10. {
    11. ui->label->setText("你选择的性别为: 其他");
    12. }
    3) 运⾏程序, 可以看到随着选择不同的单选按钮, label 中的提⽰⽂字就会随之变化.

    4) 当前代码中, 如果程序启动, 则不会选择任何选项.  

    • 可以修改代码, 让程序启动默认选中性别男
    1. Widget::Widget(QWidget *parent)
    2. : QWidget(parent)
    3. , ui(new Ui::Widget)
    4. {
    5. ui->setupUi(this);
    6. // 设置默认选中该按钮
    7. ui->radioButton_male->setChecked(true);
    8. ui->label->setText("你选择的性别为: 男");
    9. }
    • 此时运⾏程序, 即可看到 性别男 已经被选中了
    5) 当前代码中, 也可以禁⽤ "其他" 被选中.
    • 修改 widget.cpp 的构造函数
    1. // 禁⽤ other 选项
    2. ui->radioButton_other->setCheckable(false);
    • 运⾏程序, 可以看到, 点击 "其他" 按钮的时候, 虽然不会被选中, 但是可以触发点击事件, 使上⾯的 label 显⽰性别为其他.

    使⽤ setEnabled 是更彻底的禁⽤按钮的⽅式. 此时该按钮⽆法被选中, 也⽆法响应任何输⼊  

    1. // 禁⽤ other 选项
    2. ui->radioButton_other->setEnabled(false);


    1.3 Check Box

    QCheckBox 表⽰复选按钮. 可以允许选中多个.
    • QCheckBox 最相关的属性也是 checkable checked , 都是继承⾃QAbstractButton .
    • ⾄于 QCheckBox 独有的属性 tristate ⽤来实现 "三态复选框" . 这个东西⽐较冷⻔, 咱们不 做讨论

    代码⽰例: 获取复选按钮的取值

    1) 在界⾯上创建 三个复选按钮, 和⼀个普通按钮.
    • objectName 分别为 checkBox_eat , checkBox_sleep , checkBox_play , 以及pushButton

    2) 给 pushButton 添加 slot 函数  

    1. void Widget::on_pushButton_clicked()
    2. {
    3. QString result;
    4. if (ui->checkBox_eat->isChecked()) {
    5. result += ui->checkBox_eat->text();
    6. }
    7. if (ui->checkBox_sleep->isChecked()) {
    8. result += ui->checkBox_sleep->text();
    9. }
    10. if (ui->checkBox_play->isChecked()) {
    11. result += ui->checkBox_play->text();
    12. }
    13. qDebug() << "选中的内容: " << result;
    14. }
    3) 运⾏程序, 可以看到点击确认按钮时, 就会在控制台中输出选中的内容.


     1.4 Tool Button

    QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯具栏, 菜单等场景. 这个我们暂时先不介绍.

    1.5 小结

    按钮类控件在用户界面开发中扮演着重要的角色,主要用于触发特定的操作或事件。以下是关于按钮类控件的小结:

    1. QPushButton

      • 用途:常用的按钮控件,用于触发各种操作。
      • 特点:可以显示文本和图标,支持样式表定制,发出 clicked() 信号响应用户点击。
    2. QToolButton

      • 用途:工具按钮控件,通常用于工具栏、菜单栏等。
      • 特点:支持文本和图标显示,可以设置弹出菜单或下拉菜单,可以作为常规按钮或复选按钮使用。
    3. QRadioButton

      • 用途:单选按钮控件,用于在一组选项中选择一个。
      • 特点:显示一个圆形按钮,可以与其他单选按钮分组,只能选择其中的一个。
    4. QCheckBox

      • 用途:复选框控件,用于允许用户选择一个或多个选项。
      • 特点:显示一个方形按钮,可以选中或取消选中,支持与其他复选框独立使用。
    5. QAbstractButton(抽象按钮类):

      • 用途:按钮类控件的抽象基类,不直接使用,而是作为其他按钮类的基类。
      • 特点:定义了按钮类的通用行为和接口,如按下状态、点击信号等。

    这些按钮类控件都提供了丰富的功能和灵活的定制选项,开发者可以根据实际需求选择合适的按钮类型来构建用户界面。

  • 相关阅读:
    SDUT 2022 Autumn Team Contest 7th
    基于Android的校园心理咨询系统的设计与实现
    阿里云E-HPC+i4p大内存实例,加速寻因生物单细胞数据分析效率
    【LeetCode】16、最接近的三数之和
    最新AI智能创作系统ChatGPT商业源码+详细图文搭建部署教程+AI绘画系统
    spark在什么情况下会使用mapPartition
    计算机三级 网络技术 大题第一题 答题技巧分享
    uniapp 区分环境打包配置
    SpringBoot实战:轻松实现接口数据脱敏
    容器基础--基本概念入门
  • 原文地址:https://blog.csdn.net/m0_56069910/article/details/138073756