在项目中遇到一个需求,根据外部条件来确定你的界面上显示多少个按钮。于是,写一个小程序测试了下,效果还可以。
主要用到QButtonGroup类,需要包含头文件,接着申请一个按钮数组对象QButtonGroup *buttonGroup,所有的按钮在ui中定义好了。
下面贴代码:
.h文件:

#include <QWidget>
#include <QButtonGroup>
#include <QDebug>namespace Ui {
class SwitchButtonWidget;
}class SwitchButtonWidget : public QWidget
{Q_OBJECTpublic:explicit SwitchButtonWidget(int number,QWidget *parent = 0);//number即为已知的外部条件~SwitchButtonWidget();private:Ui::SwitchButtonWidget *ui;QButtonGroup *buttonGroup;int m_number;void initButton();
public slots:void buttonJudge(int buttonId);
};

.cpp文件:

SwitchButtonWidget::SwitchButtonWidget(int number, QWidget *parent) :QWidget(parent),ui(new Ui::SwitchButtonWidget)
{ui->setupUi(this);m_number = number;setStyleSheet("background-color:white;""QPushButton{""background-color:white;""color:black;""text-align:center;""border-radius: 8px;""border: 2px groove gray;""border-style: outset;""}");buttonGroup = new QButtonGroup;//第二个参数id可以自行定义buttonGroup->addButton(ui->pushButton_1,1);buttonGroup->addButton(ui->pushButton_2,2);buttonGroup->addButton(ui->pushButton_3,3);buttonGroup->addButton(ui->pushButton_4,4);buttonGroup->addButton(ui->pushButton_5,5);buttonGroup->addButton(ui->pushButton_6,6);buttonGroup->addButton(ui->pushButton_7,7);buttonGroup->addButton(ui->pushButton_8,8);buttonGroup->addButton(ui->pushButton_9,9);initButton();connect(buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(buttonJudge(int)));}SwitchButtonWidget::~SwitchButtonWidget()
{delete ui;
}void SwitchButtonWidget::initButton()
{QPushButton *button;bool isFlag = false;QString bname;if(m_number > 9)return;qDebug() << "m_number" << m_number;for(int i = 1; i <= m_number;i++)//pushButton_1{bname = "pushButton_" + QString::number(i);button = this->findChild<QPushButton *>("pushButton_" + QString::number(i));//注意这样是this调用findChild方法,一开始使用这个是我是buttonGroup直接去调用的,这个得到的是空的无效的按钮isFlag = true;if(isFlag){button->show();isFlag = false;}}for(int i = m_number + 1; i <= 9;i++){button =  this->findChild<QPushButton *>("pushButton_" + QString::number(i));isFlag = false;if(!isFlag){button->hide();isFlag = false;}}
}void SwitchButtonWidget::buttonJudge(int buttonId)
{qDebug() << "the Key:" << buttonId;
}

主要用到findChild()方法,通过按钮的名字去查找相应的按钮,返回找到的按钮,还有一个findChildern()方法返回的是按钮的QList<>数组。
最初的想法是根据id值来索引相应的按钮,发现没有对应的接口,如果可以这样就方便多了。
/************************************分割线*************************************/
它的成员函数buttons()的使用:

//btnGroup为按钮组对象
QList<QAbstractButton*> buttonsList = btnGroup->buttons();if(buttonsList.isEmpty()){qDebug() << "isEmpty";return;}foreach (QAbstractButton *button, buttonsList){((QPushButton*)button)->setEnabled(false);//设置按钮不可点击}

在上面的例子中,通过buttons()函数获取btnGroup的每一个按钮对象,然后设置为不可点击。QAbstractButton 类是 QPushButton,QCheckBox,QRadioButton 等类的基类,它可以代表按钮、单选纽、复选纽等重要窗口部件。所以强转成QPushButton类。end…

Qt之QButtonGroup简单使用相关推荐

  1. VS+QT+SQLite实现简单的计算器

    VS+QT+SQLite实现简单的计算器 0. 计算器功能说明 0.1 计算器界面 0.2 历史记录模块 0.3 总体说明 1. 安装VS 1.1 下载VS_Community 1.2 安装VS 2. ...

  2. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  3. Ubuntu 安装 Qt 开发环境 简单实现

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 安装 Qt 开发环境 简单实现是本文要介绍的内容,内容很短,取其精华,详细介绍Qt 类库的说明,先来看内容. 一 ...

  4. Qt 多线程的简单演示

    Qt 多线程的简单演示 任务:单击""开始""按钮将启动数个工作线程,线程由checkBox 来决定线程的启用或者关闭,各个线程循环打印数字,数字每秒累加1:单 ...

  5. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  6. Qt实现一个简单的编译器(软件生成器)

    Qt实现一个简单的编译器(软件生成器) 本文章只记录如何用Qt实现一个简单编译器,即点击本软件中的按钮便可在另一目录中生成一个新的软件(与本软件不冲突). 文章目录 Qt实现一个简单的编译器(软件生成 ...

  7. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  8. qt登录界面简单制作,是真的保姆级别了!!!

    qt登录界面简单制作,是真的保姆级别了!!! 第二周工程创新实践:创建一个窗体,设计用户登录的界面(含有用户名.密码),并实现用户登录的功能,要求用户提交的登录按钮时能获取界面中的用户名.密码数据并与 ...

  9. 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

最新文章

  1. 如何定义中文转语音的语气
  2. 数据结构 --静态队列 讲解
  3. Action Framework Medium attribute 初始化逻辑
  4. 简述单机,集群,分布式架构区别及联系
  5. Android 异步加载神器Loader全解析
  6. X 射线技术揭示芯片的秘密!
  7. 坐地起价?三星首款折叠屏手机 1.3 万起!
  8. 每日一题/009/微积分/极限/连续
  9. 全球及中国电子材料市场需求分析与十四五投资潜力预测报告2021年版
  10. 【分享】小米MIUI免root一键删除系统内置软件
  11. Paper Notes: Cross-Domain Image Translation Based on GAN
  12. Android主题色设为透明
  13. 北冥乘海生:996其实没什么卵用
  14. 大数据平台架构实战(二)IntelliJ IDEA搭建hadoop
  15. Python实现视频转 gif 动图
  16. 华为链路聚合(路由器和交换机)
  17. itext实现pdf内容替换
  18. 3-基于51单片机的篮球计分器
  19. 【科研】2023年CCF-B和CCF-C类会议截稿时间整理
  20. mac 安装homebrew 报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refu

热门文章

  1. 代码越“整洁”,性能越“拉胯”,甚至导致程序变慢 15 倍!
  2. 图像处理——HSV图像应用(matlab)
  3. 考研党必须知道的时间线(22考研必看)
  4. 『Nvidia Jetson AGX Xavier笔记』Xavier(arrch64架构)刷机Jetpack4.2!
  5. day08 String类
  6. (转)海量用户积分排名算法探讨
  7. 985毕业工作一年,腾讯试水一面连环50问,瞬间表示怀疑人生了.
  8. 触控Intel强强联手:多维提升游戏体验
  9. Springboot商业项目-单体项目开发流程
  10. 全球自动驾驶仿真平台盘点