首页 > 编程语言 >C++ Qt开发:RadioButton单选框分组组件

C++ Qt开发:RadioButton单选框分组组件

时间:2023-12-13 09:00:23浏览次数:30  
标签:Qt 单选框 C++ radioButton ui 选中 按钮 单选

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QRadioButton单选框组件以及与之交互的QButtonGroup类的常用方法及灵活运用。

QRadioButton是Qt框架中的一个部件(Widget),用于提供单选按钮的界面元素。单选按钮允许用户从多个互斥的选项中选择一个,通常用于表示一组相关但互斥的选项。

以下是QRadioButton的一些常用方法,以表格形式概述:

方法 描述
QRadioButton(QWidget *parent = nullptr) 构造函数,创建一个单选按钮,可指定父部件。
setText(const QString &text) 设置单选按钮的文本标签。
text() const 获取单选按钮的文本标签。
setChecked(bool checked) 设置单选按钮的选中状态,true表示选中,false表示未选中。
isChecked() const 判断单选按钮是否处于选中状态。
setAutoExclusive(bool enabled) 设置是否自动将同一组中的其他单选按钮设为未选中状态。
setObjectName(const QString &name) 设置对象名称,用于样式表等。
setCheckedState(Qt::CheckState state) 设置单选按钮的选中状态,可选值有Qt::CheckedQt::UncheckedQt::PartiallyChecked
checkState() const 获取单选按钮的选中状态,返回Qt::CheckedQt::UncheckedQt::PartiallyChecked
toggled(bool checked) 信号,当单选按钮的选中状态发生改变时触发。参数checked表示是否选中。
click() 模拟点击单选按钮,触发点击事件。
setDisabled(bool disable) 设置单选按钮是否被禁用,true表示禁用,false表示启用。
setEnabled(bool enable) 设置单选按钮是否启用,true表示启用,false表示禁用。
blockSignals(bool block) 阻塞或解除阻塞信号与槽的连接,用于在某些操作时临时禁用信号槽。

这些方法提供了对QRadioButton的一些基本操作,包括设置文本、选中状态、信号与槽等。通过这些方法,可以在应用程序中方便地创建和控制单选按钮。总而言之,QRadioButton是一种简单而有效的界面元素,用于在多个互斥的选项中进行单一选择。

谈到QRadioButton组件就不得不提起QButtonGroup类,因为这两者通常是需要组合在一起使用的,一般来说QButtonGroup用于管理一组按钮,通常是单选按钮(QRadioButton)或复选按钮(QCheckBox)。它为这组按钮提供了一些便捷的方法,方便进行管理和操作。

首先我们需要在mainwindow.h头文件中手动增加一个槽函数的声明,该槽函数用于触发后的处理工作。

private slots:
    void MySlots();

其次在主程序mainwindow.cpp中我们通过new QBUttonGroup新建一个按钮组,并将其加入到group_sex组内,创建信号和槽的绑定,将信号全部绑定到MySlots()槽函数上,如下所示;

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QButtonGroup>
#include <iostream>

// 定义全局组变量
QButtonGroup *group_sex;

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

    // 将RadioButton放入ButtonGroup组中
    group_sex = new QButtonGroup(this);
    group_sex->addButton(ui->radioButton_male,0);
    group_sex->addButton(ui->radioButton_female,1);
    group_sex->addButton(ui->radioButton_unknown,2);

    // 设置默认选中
    ui->radioButton_unknown->setChecked(true);

    // 绑定信号和槽
    connect(ui->radioButton_male,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
    connect(ui->radioButton_female,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
    connect(ui->radioButton_unknown,SIGNAL(clicked(bool)),this,SLOT(MySlots()));
}

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

// 手动创建一个槽函数
void MainWindow::MySlots()
{
    switch(group_sex->checkedId())
    {
    case 0:
        std::cout << "male" << std::endl;
        QMessageBox::information(nullptr, "信息", "用户选中了男", QMessageBox::Ok);
        break;
    case 1:
        std::cout << "female" << std::endl;
        QMessageBox::information(nullptr, "信息", "用户选中了女", QMessageBox::Ok);
        break;
    case 2:
        std::cout << "unknown" << std::endl;
        QMessageBox::information(nullptr, "信息", "用户选中了未知", QMessageBox::Ok);
        break;
    }
}

当程序运行后,读者可自行选择不同的单选框,此时会弹出不同的提示信息,如下图;

当然如果读者不想使用QButtonGroup对单选框进行分组操作,同样可以实现判断选中状态,通过依次检查isChecked()单选框的状态即可实现,但是此类方式并不推荐使用。

void MainWindow::on_pushButton_clicked()
{
    if(ui->radioButton_male->isChecked() == true)
    {
        std::cout << "选中男" << std::endl;
    }
    if(ui->radioButton_female->isChecked() == true)
    {
        std::cout << "选中女" << std::endl;
    }
    if(ui->radioButton_unknown->isChecked() == true)
    {
        std::cout << "选中未知" << std::endl;
    }
}

标签:Qt,单选框,C++,radioButton,ui,选中,按钮,单选
From: https://www.cnblogs.com/LyShark/p/17895152.html

相关文章

  • iMX287A嵌入式Qt环境搭建
    原文:https://zhuanlan.zhihu.com/p/111021921?utm_id=01.嵌入式Qt简介Qt是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代......
  • ubuntu安装qt4.8.6
    转载(https://blog.csdn.net/qq_26849933/article/details/127115646)文章目录前言一、查看GCC版本二、QT4库安装下载降低GCC编译器版本前期介绍具体实施QT4详细安装步骤参考链接前言ubuntu18.04及以后的版本(20.04,22.04)在编译QT4库的时候会报错,无......
  • C++类中的友元
    声明关键字template<classT>friendTT_Name//这里的T表示声明的类型,T_Name表示类型名称友元声明的作用在一个类中,如果某个成员被private修饰而封装起来,对于外部的函数是无法访问到该成员信息的但如果对外部访问函数进行友元修饰,函数就可以对类中的封装成员进行访问#include<ios......
  • c++ 多线程
    https://blog.csdn.net/sjc_0910/article/details/118861539unique_lock和lock_guard多线程是一种实现并发处理的有效方式,C++11开始引入了<thread>库,使得多线程编程更加容易和高效。以下是C++中多线程编程的一些主要内容:线程的创建:在C++中,可以使用std::thread类来创建一......
  • 将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效的解决方案
    问题描述:将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效,如果只有两个来回切的话,是没有问题的,当出现多个页面的时候,就会切换失灵。解决思路:将QWebEngineView浮到上面,只要实现大小、位置、显示隐藏与主页面同步即可。 QWebEngineView窗口构造窗口添加:se......
  • 笔记:Qt开发之多线程的实现(QThread、moveToThread)
    目标:了解Qt实现多线程的两种基本方式(QThread、moveToThread),各自的实现方式、使用场景。1,子类化QThread实现方式:继承QThread类,重写run()函数实现多线程classWorkerThread:publicQThread{ Q_OBJECT public: explicitMyThread(QObject*parent=nullptr):QObject(pare......
  • 使用C++和QT实现Log自定义日志系统
    MyLog说明使用QT的qInstallMessageHandler函数结合qDebug,qInfo实现自定义的日志系统输出日志到文件和控制台自动检测日志文件大小自动更新日志文件修改日期自动备份自动删除一个月前的日志文件支持多线程程序支持扩展,可输出日志到数据库,网络,或服务器支持扩展,可使用co......
  • 笔记:Qt开发之定制化qDebug()函数
    目标:实现qDebug()函数的定制输出,包含文件名、函数名、行数等信息1,通过qSetMessagePattern函数,实现定制化输出intmain(intargc,char**argv){QApplicationapp(argc,argv);//改变缺省消息处理程序的输出,信息:线程:功能函数(行数):时间qSetMessagePattern("%{mes......
  • 关于c++序列化
    对于一个复杂数据对象的存储和装载有很多方式,比如自定义的文本或者2进制格式,以及对应的读取和写入程序。也有一些适应力较强比较通用的方式,文本的有xml和json。尤其是xml文件查看起来比较方便。但是xml的最大问题就是装载和保存都比较慢。装载1个大文件足以把头发等白:)在c++里......
  • C++学习笔记八:极限和数学运算<limits><cmath>
    1)<limits>库:1.1源文档:https://en.cppreference.com/w/cpp/types/numeric_limits#include<limits> 1.2库函数:函数解释:对于一个浮点数,lowest表示最小的可表示的负数,min表示最小的可表示的接近0的数,max表示最大的可表示的正数对于一个有符号整数,min表示可以表示的最小的......