【Qt】控件基础:QPushButton(按钮) QRadioButton(单选按钮)和QCheckBox(复选框)的交互实现

前言:

在Qt框架中,控件是构建用户界面的基本元素,它们允许用户与应用程序进行交互。本段代码主要介绍了Qt中的几种常用控件:QPushButton(按钮)、QRadioButton(单选按钮)和QCheckBox(复选框)。这些控件不仅具有基本的交互功能,还支持图标、快捷键设置、状态变更信号等高级特性,使得开发者可以创建出既美观又实用的用户界面。通过具体的代码示例,我们可以看到如何利用这些控件来实现具体的功能,如按钮的图标和快捷键设置、单选按钮的分组管理以及复选框的状态管理。
之前,QWidget 中涉及到的各种属性/函数/使用方法,针对接下来要介绍的Qt的各种控件都是有效的。

1.Push Button

使用 QPushButton 表示一个按钮,这也是当前我们最熟悉的一个控件了。
QPushButton 继承自 QAbstractButton。这个类是一个抽象类,是其他按钮的父类。
在这里插入图片描述
抽象类 这个类包含了纯虚函数,无法创建出实例(对象)
就得创建子类,重写上述虚函数,才能创建出子类的实例。

QAbstractButton中,和QPushButton相关性较大的属性:
在这里插入图片描述

1.1.给按钮加图标(图片)

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 创建一个图标对象
    QIcon icon(":/sdq.png");
    // 设置图标
    ui->pushButton->setIcon(icon);
    //设置图标尺寸
    ui->pushButton->setIconSize(QSize(50, 50));
}

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

在这里插入图片描述

1.2. 给按钮添加快捷键

前面写过一个例子,通过四个按钮,控制target 按钮移动
之前这个移动述同过鼠标点击按钮来实现的
此处就可以引入快捷键,通过快捷键来实现操作
此处按钮直接用图片来表示

  • 步骤:

1)创建 qrc 文件,导入资源
2)编辑ui文件,创建界面
3)编写构造函数,来完成一些初始化操作
4)实现方向键的槽函数
5)设置快捷键(关键点) 也是需要再Widget的构造函数中完成,程序一启动,快捷键就是有效的
6)连发功能
键盘快捷键,默认就是能连发的,但是鼠标快捷键点击按钮则不行

#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(":/sdq.png"));
    ui->pushButton_target->setIconSize(QSize(70, 70));

    ui->pushButton_up->setIcon(QIcon(":/up.png"));
    ui->pushButton_up->setIconSize(QSize(40, 40));

    ui->pushButton_down->setIcon(QIcon(":/down.png"));
    ui->pushButton_down->setIconSize(QSize(40, 40));

    ui->pushButton_left->setIcon(QIcon(":/left.png"));
    ui->pushButton_left->setIconSize(QSize(40,   40));

    ui->pushButton_right->setIcon(QIcon(":/right.png"));
    ui->pushButton_right->setIconSize(QSize(40, 40));

    // 直接通过按键的名字设置跨界键设置快捷键
    ui->pushButton_up->setShortcut(QKeySequence("ctrl+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::CTRL + 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));


    // 开启鼠标的连发功能(键盘连发默认就是支持的)
    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()
{
    // 获取 target 的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于上次的位置,设置新的位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}

void Widget::on_pushButton_down_clicked()
{
    // 获取 target 的位置
    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()
{
    // 获取 target 的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于上次的位置,设置新的位置
    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}


void Widget::on_pushButton_right_clicked()
{
    // 获取 target 的位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于上次的位置,设置新的位置
    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

2. Radio Button

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个.
作为 QAbstractButtonQWidget 的子类, 上面介绍的属性和用法, 对于 QRadioButton
同样适用。
QAbstractButton 中和 QRadioButton 关系较大的属性
在这里插入图片描述

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

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

    // 添加一个默认的选项
    ui->radioButton_male->setChecked(true);
    ui->label->setText("您选择的性别为: 男");

    // 禁用 其他 这个选项
    // checkedable 只是能让这个按钮不被选中,仍然可以响应点击事件
    //ui->radioButton_other->setCheckable(false);
    ui->radioButton_other->setEnabled(false);
    // ui->radioButton_other->setDisabled(true);
}

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



void Widget::on_radioButton_male_clicked()
{
    // 把界面上的 label 的内容进行更新
    ui->label->setText("您选择的性别为:男");
}

void Widget::on_radioButton_female_clicked()
{
    ui->label->setText("您选择的性别为:女");
}

void Widget::on_radioButton_other_clicked()
{
    ui->label->setText("您选择的性别为:其他");
}

在这里插入图片描述
在这里插入图片描述

void Widget::on_radioButton_clicked(bool checked)
{
    // 此处的 checked 就表示了当前 radioButton 的选中状态
    qDebug() << "clicked: " << checked;
}

void Widget::on_radioButton_2_pressed()
{
    qDebug() << "pressed";
}


void Widget::on_radioButton_3_released()
{
    qDebug() << "released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    // checked 状态改变,就会触发这个信号
    qDebug() << "toggled: " << checked;
}
  • 基于 QRadioButton 实现一个简单的模拟点餐的功能:
    在这里插入图片描述
    RadioButton 默认是排他的
    一旦界面上需要“多组”单选按钮的时候,希望组和组之间不要有互相影响。

QButtonGroup类,可以针对单选按钮进行分组:

#include "widget.h"
#include "ui_widget.h"
#include <QButtonGroup>

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

    // 使用 QButtonGroup 对单选按钮进行分组
    QButtonGroup* group1 = new QButtonGroup(this);
    QButtonGroup* group2 = new QButtonGroup(this);
    QButtonGroup* group3 = new QButtonGroup(this);

    // 把上述按钮,放到不同的组里面
    group1->addButton(ui->radioButton);
    group1->addButton(ui->radioButton_2);
    group1->addButton(ui->radioButton_3);

    group2->addButton(ui->radioButton_4);
    group2->addButton(ui->radioButton_5);
    group2->addButton(ui->radioButton_6);

    group3->addButton(ui->radioButton_7);
    group3->addButton(ui->radioButton_8);
    group3->addButton(ui->radioButton_9);
}

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

3. Check Box

QCheckBox 表示复选按钮. 可以允许选中多个.
QCheckBox 最相关的属性也是 checkablechecked , 都是继承⾃
QAbstractButton .
⾄于 QCheckBox 独有的属性 tristate 用来实现 “三态复选框” . 这个东西比较冷门, 咱们不
做讨论。

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

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

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


void Widget::on_pushButton_clicked()
{
    QString result = "今天你的安排是:";
    if (ui->checkBox_learn->isChecked()) {
        result += ui->checkBox_learn->text() + " ";
    }
    if (ui->checkBox_game->isChecked()) {
        result += ui->checkBox_game->text() + " ";
    }
    if (ui->checkBox_work->isChecked()) {
        result += ui->checkBox_work->text() + " ";
    }
    ui->label->setText(result);
}

在这里插入图片描述

总结:

本文通过具体的代码示例,详细介绍了Qt中的几种常用控件及其使用方法。首先,我们学习了如何使用QPushButton来创建按钮,并为其添加图标和快捷键,还了解了如何通过重写信号和槽函数来响应按钮的点击事件。接着,我们探讨了QRadioButton单选按钮的使用,包括如何通过QButtonGroup类来实现单选按钮的分组,确保不同组的单选按钮互不影响。最后,我们了解了QCheckBox复选框的使用方法,包括如何检查复选框的状态,并根据选中的复选框更新界面上的信息。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q_hd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值