当前位置: 首页 > article >正文

Qt-常用的按钮控件 QPushButton QRadioButton QCheckBox

QPushButton

QPushButton的继承关系如下:

QPushButton的常见属性

QPushButton添加图标 

另外关于用qrc管理图片,如果图片太多了,我们还可以创建一个文件夹进行分类

如上,都被我放在了image这个文件夹中。

QPushButton添加快捷键 

我们还是搞四个方向键,通过点击方向键,来让一个按钮进行对应方向的移动。

设置快捷键的操作要放在构造函数中,这样Widget一构造,我们的快捷键也就设置好了。

另外,如果是快捷键的方式,那么它默认是有连发功能的,而鼠标点击的方式没有,我们还可以给它设置成具有连发功能。
代码:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->pushButton_target->setIcon(QIcon(":/smile.png"));
    ui->pushButton_target->setIconSize(QSize(140,150)); // 设置图标大小

    // 设置上下左右的图标和大小
    ui->pushButton_up->setIcon(QIcon(":/image/up.png")); // 记得把目录加上
    ui->pushButton_up->setIconSize(QSize(80,80));

    ui->pushButton_down->setIcon(QIcon(":/image/down.png")); // 记得把目录加上
    ui->pushButton_down->setIconSize(QSize(80,80));

    ui->pushButton_left->setIcon(QIcon(":/image/left.png")); // 记得把目录加上
    ui->pushButton_left->setIconSize(QSize(80,80));

    ui->pushButton_right->setIcon(QIcon(":/image/right.png")); // 记得把目录加上S
    ui->pushButton_right->setIconSize(QSize(80,80));

    // 设置快捷键,快捷键默认具有连续触发的功能,鼠标点击默认是没有的
    //ui->pushButton_up->setShortcut(QKeySequence("w")); // 可以以这种方式设置,但是不推荐,因为编译器不会做语法检查
    ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W)); // 建议使用这种方式,编译器会对语法进行检查
    // ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_P + Qt::CTRL)); // 也可以这样设置组合快捷键,只能设置一种快捷键
    ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
    ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
    ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));

    // 加上连发功能
    ui->pushButton_up->setAutoRepeat(true);
    ui->pushButton_down->setAutoRepeat(true);
    ui->pushButton_left->setAutoRepeat(true);
    ui->pushButton_right->setAutoRepeat(true);
}

Widget::~Widget()
{
    delete ui;
}

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());
}

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());
}

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());
}

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());
}

QRadioButton

QRadioButton是一个单选按钮,在多个QRadioButton中只能选择一个。

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

 

 

实验:选择性别 

 

在这个实验中,我们只能选择一个性别。

程序刚启动的初始状态是这样的:

 

我们可以给它增加一个默认选项

比如让它默认选择男

我们可以在Widget的构造函数中进行修改:

 注意:
我们这里让它进行一个默认选中,但是不会让他触发点击的信号,只是让它被默认选中而已。

我们还可以禁用其它选项,同样在构造函数中进行修改

比如我们禁用 其它选项

 注意:虽然我们将这个神秘选项设置成了不可选中,但是我们点击它的话依旧会触发信号并执行槽函数的。

我们可以使用 setEnable彻底禁止这个选项。

比如,我们假设选了女,就将神秘选项禁用掉:

 

 验证QAbstractButton的其它信号

在QPushButton中,我们用的最多的就是clicked,在这里我们用QRadioButton来分别验证这里的其它信号

 

 

运行结果:

 pressed就是鼠标只要点击还没有放开就会触发,而released只有当鼠标放开才会触发。

toggled是只有当checked信号发生改变时才会触发。

这里的clicked跟released用起来非常相似,但是还有一些区别的:
对于clicked:我们点击这个按钮时,如果在松开鼠标前将鼠标移开按钮,那么此时松开后不会触发

对于released:当我们点击这个按钮时,就算鼠标没有松开,我们将鼠标移开了按钮,它也会触发

对单选按钮进行分组

比如有这么一个选择场景:1.先选择性别。2.再选择爱好:

 对于这个场景,按理来说,我们在性别这里选择一个,然后在爱好这里选择一个,但是运行起来

我们发现这五个按钮我们只能选择一个,这就有点不合理了。

因此我们需要对这些单选按钮进行分组,让它们互相不干扰。

可以使用QButtonGroup类,对它们进行分组

 

 

QCheckBox 

QCheckBox表示复选按钮。

QCheckBox 最相关的属性也是 checkable checked , 都是继承⾃QAbstractButton

 

这里简单演示一下:

 

效果:

 

 非常好


http://www.kler.cn/a/404843.html

相关文章:

  • 推荐一款专业电脑护眼工具:CareUEyes Pro
  • 蓝桥杯每日真题 - 第20天
  • js批量输入地址获取经纬度
  • AUTOSAR网络管理中的主动唤醒与被动唤醒
  • 吴恩达《提示词工程》(Prompt Engineering for Developers)课程详细笔记
  • .NET9 - 新功能体验(一)
  • Kadane 算法 二维 详解
  • 如何创建一个网站?初学者的分步指南
  • 【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
  • 网络编程day2.2~day3——TCP并发服务器
  • TCP Listen 队列详解与优化指南
  • springboot基于大数据技术的电影推荐系统的设计与实现
  • 区块链预言机;预言机的部署、与智能合约的关系以及是否分布式;基于Fabric联盟链与链外世界的数据交互
  • Python 之网络爬虫
  • Spring Security SecurityContextHolder(安全上下文信息)
  • webpack进阶(二)
  • vue不刷新浏览器更新页面的方法
  • MacOS下的Opencv3.4.16的编译
  • pcap_set_buffer_size()函数
  • 使用Java爬虫时,有哪些性能优化技巧?
  • 解决MindSpore-2.4-GPU版本的安装问题
  • VSCode 2022 离线安装插件QT VSTOOl报错此扩展不能安装在任何当前安装的产品上。
  • C++ list (链表)容器
  • Spring validation 分组校验用法
  • WPF如何全局应用黑白主题效果
  • Java多线程编程详解