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中只能选择一个。
实验:选择性别
在这个实验中,我们只能选择一个性别。
程序刚启动的初始状态是这样的:
我们可以给它增加一个默认选项
比如让它默认选择男
我们可以在Widget的构造函数中进行修改:
注意:
我们这里让它进行一个默认选中,但是不会让他触发点击的信号,只是让它被默认选中而已。
我们还可以禁用其它选项,同样在构造函数中进行修改
比如我们禁用 其它选项
注意:虽然我们将这个神秘选项设置成了不可选中,但是我们点击它的话依旧会触发信号并执行槽函数的。
我们可以使用 setEnable彻底禁止这个选项。
比如,我们假设选了女,就将神秘选项禁用掉:
验证QAbstractButton的其它信号
在QPushButton中,我们用的最多的就是clicked,在这里我们用QRadioButton来分别验证这里的其它信号
运行结果:
pressed就是鼠标只要点击还没有放开就会触发,而released只有当鼠标放开才会触发。
toggled是只有当checked信号发生改变时才会触发。
这里的clicked跟released用起来非常相似,但是还有一些区别的:
对于clicked:我们点击这个按钮时,如果在松开鼠标前将鼠标移开按钮,那么此时松开后不会触发
对于released:当我们点击这个按钮时,就算鼠标没有松开,我们将鼠标移开了按钮,它也会触发
对单选按钮进行分组
比如有这么一个选择场景:1.先选择性别。2.再选择爱好:
对于这个场景,按理来说,我们在性别这里选择一个,然后在爱好这里选择一个,但是运行起来
我们发现这五个按钮我们只能选择一个,这就有点不合理了。
因此我们需要对这些单选按钮进行分组,让它们互相不干扰。
可以使用QButtonGroup类,对它们进行分组
QCheckBox
QCheckBox表示复选按钮。
这里简单演示一下:
效果:
非常好
原文地址:https://blog.csdn.net/m0_74099572/article/details/143865966
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!