[Qt]QButtonGroup与QCheckBox、QRadioButton的使用指南



原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://blog.csdn.net/humanking7/article/details/85786540


1.效果

QButtonGroup实现QCheckBox不互斥,而QRadioButton互斥
[Qt]QButtonGroup与QCheckBox、QRadioButton的使用指南

2.核心代码

2.0.函数原型

Public Functions

QButtonGroup(QObject * parent = 0)
~QButtonGroup()
bool	exclusive() const 
void	setExclusive(bool) //设置button是否互斥,默认互斥

void	addButton(QAbstractButton * button, int id = -1)
QAbstractButton *	button(int id) const
QList<QAbstractButton *>	buttons() const
QAbstractButton *	checkedButton() const
int	checkedId() const
int	id(QAbstractButton * button) const
void	removeButton(QAbstractButton * button)
void	setId(QAbstractButton * button, int id)
31 public functions inherited from QObject

Signals

void	buttonClicked(QAbstractButton * button)
void	buttonClicked(int id)
void	buttonPressed(QAbstractButton * button)
void	buttonPressed(int id)
void	buttonReleased(QAbstractButton * button)
void	buttonReleased(int id)
void	buttonToggled(QAbstractButton * button, bool checked)
void	buttonToggled(int id, bool checked)

2.1.初始化代码

QButtonGroup* m_btnGp_AE_eff;//针对CheckBox的buttonGroup
QButtonGroup* m_btnGp_AE_faultFlg;//针对radioButton的buttonGroup
//==================
//QCheckBox
//==================
//AE_eff
m_btnGp_AE_eff = new QButtonGroup();
m_btnGp_AE_eff->setExclusive(false);//不互斥-【重点】
//将CheckBox的指针加入到ButtonGroup中
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_0, 0);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_1, 1);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_2, 2);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_3, 3);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_4, 4);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_5, 5);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_6, 6);
m_btnGp_AE_eff->addButton(ui.cB_AE_eff_7, 7);

//用于checkBox显示值
str_AE_eff_V0[0] = "[0]气压高度(0:无效)";
str_AE_eff_V0[1] = "[1]指示空速(0:无效)";
str_AE_eff_V0[2] = "[2]真空速(0:无效)";
str_AE_eff_V0[3] = "[3]大气总温(0:无效)";
str_AE_eff_V0[4] = "[4]大气静温(0:无效)";
str_AE_eff_V0[5] = "[5]升降速度(0:无效)";
str_AE_eff_V0[6] = "[6]备份总温(0:无效)";
str_AE_eff_V0[7] = "[7](0:正常工作)";

str_AE_eff_V1[0] = "[0]气压高度(1:有效)";
str_AE_eff_V1[1] = "[1]指示空速(1:有效)";
str_AE_eff_V1[2] = "[2]真空速(1:有效)";
str_AE_eff_V1[3] = "[3]大气总温(1:有效)";
str_AE_eff_V1[4] = "[4]大气静温(1:有效)";
str_AE_eff_V1[5] = "[5]升降速度(1:有效)";
str_AE_eff_V1[6] = "[6]备份总温(1:有效)";
str_AE_eff_V1[7] = "[7](1:受令自检)";

//==================
//QRadioButton
//==================
//AE_faultFlg
m_btnGp_AE_faultFlg = new QButtonGroup();
m_btnGp_AE_faultFlg->setExclusive(true);//互斥-【重点】
//将radioButton加入到ButtonGroup中
m_btnGp_AE_faultFlg->addButton(ui.rB_AE_fault_0x00, 0);
m_btnGp_AE_faultFlg->addButton(ui.rB_AE_fault_0x80, 1);

2.2.消息设置代码

槽函数

protected slots:
	void slot_btnGp_AE_eff(int id);
	void slot_btnGp_AE_faultFlg(int id);

设置Connect

connect(m_btnGp_AE_eff, SIGNAL(buttonClicked(int)), this, SLOT(slot_btnGp_AE_eff(int)));
	connect(m_btnGp_AE_faultFlg, SIGNAL(buttonClicked(int)), this, SLOT(slot_btnGp_AE_faultFlg(int)));

2.3.处理函数

void FaultInjection::slot_btnGp_AE_eff(int id)
{
	//qDebug() << "AE_eff" << id;
	QString strShow;
	int i;
	uint8 val = 0x00;
	uint8 tmpBit = 0x00;
	QCheckBox *cb_tmp;


	//这段代码优势:
	//因为CheckBox的id和对应的bit位置是一致的,所以可以获取后直接移动得到对应的位置
	//最后在将这些bit与起来
	for (i = 0; i < 8;i++)
	{
		cb_tmp = (QCheckBox *)m_btnGp_AE_eff->button(i);
		tmpBit = getCheckBoxVal(cb_tmp) << i;//数据移动到对应的位
		val = val | tmpBit;		
	}
	
	//改变ui文字
	cb_tmp = (QCheckBox *)m_btnGp_AE_eff->button(id);
	if (cb_tmp->isChecked())
	{//选中了为1
		cb_tmp->setText(str_AE_eff_V1[id]);
	} 
	else
	{//没选中为0
		cb_tmp->setText(str_AE_eff_V0[id]);
	}

	// 改变lab
	strShow = QString("0x%1 = %2 b").arg(int(val), 2, 16, QLatin1Char('0')).arg(int(val), 8, 2, QLatin1Char('0'));	
	ui.lab_AE_eff_val->setText(strShow);

	//改变全局变量值
	m_Ui_fault.AE_eff = val;

}

void FaultInjection::slot_btnGp_AE_faultFlg(int id)
{
	//qDebug() << "AE_faultFlg" << id;
	//QRadioButton* rb_tmp;
	QString strShow;	
	uint8 val = 0x00;

	//rb_tmp = (QRadioButton *)m_btnGp_AE_faultFlg->button(id);
	if (0==id)
	{//0x00 大气机故障
		val = 0x00;
		
	} 
	else if (1==id)
	{//0x80 大气机正常有效
		val = 0x80;
	}


	// 改变lab
	strShow = QString("0x%1 = %2 b").arg(int(val), 2, 16, QLatin1Char('0')).arg(int(val), 8, 2, QLatin1Char('0'));
	ui.lab_AE_faultFlg_val->setText(strShow);

	//改变全局变量值
	m_Ui_fault.AE_faultFlg = val;
}


[Qt]QButtonGroup与QCheckBox、QRadioButton的使用指南