Qt 中QButtonGroup 的用法

今天我们介绍下QButtonGroup的用法,按照字面意思理解就是按钮组,QButtonGroup能够用到很多地方,比如和QStackedWidget合起来使用能够达到实现tab,也可以单独使用形成多个按钮单选的需求。
构造:

	QButtonGroup::QButtonGroup ( QObject * parent = 0 );

他的public方法也比较简单:

	void	addButton ( QAbstractButton * button )
    void	addButton ( QAbstractButton * button, int id )

上面这两个方法均能够将按钮添加到按钮组中,区别是第一种的方法没有指定按钮的id,如果QButtonGroup不指定按钮的id,他默认是从-2开始,在实际需求中,我们经常会遇到从0开始,那么第二种方法就能够很好的解决这个问题,因为它可以指定按钮的id,对一些我们需要精确确定点击的按钮属于按钮组中的哪个,能够提供很好的帮助。
其他的方法都比较简单:

	QAbstractButton *	button ( int id ) const
    QList<QAbstractButton *>	buttons () const

这两个方法和前面的恰好相反,功能是获取按钮组中指定id的按钮或者全部按钮的列表

	QAbstractButton *	checkedButton () const

这个方法是获取目前按钮组选中的按钮

	void setExclusive ( bool )   

设定按钮组互斥,也就是说如果设置为true之后,按钮组中的按钮每次都只能够有一个被选中

下面的几个方法按照字面解释基本能够确定用法,就不多解释

	int  checkedId () const
	bool exclusive () const
	int  id ( QAbstractButton * button ) const
	void removeButton ( QAbstractButton * button )
	void setId ( QAbstractButton * button, int id )

信号也有几种:

	void	buttonClicked ( QAbstractButton * button )
    void	buttonClicked ( int id )
    void	buttonPressed ( QAbstractButton * button )
    void	buttonPressed ( int id )
    void	buttonReleased ( QAbstractButton * button )
    void	buttonReleased ( int id )

基本上我们就能够用到上面的两个信号,当然具体其他的信号,还是要根据自己的需要来确定

下面我们看下主要用法:
包含头文件:

	#include<QButtonGroup>
	QButtonGroup* pButtonGroup = new QButtonGroup();
    pButtonGroup->setExclusive(true);               //设置这个按钮组为互斥模式
    pButtonGroup->addButton(ui->btnHole, 0);
    pButtonGroup->addButton(ui->btnRidge, 1);
    pButtonGroup->addButton(ui->btnSurface, 2);
    pButtonGroup->addButton(ui->btnOther, 3);

    //上面介绍的是有已经在Qt designer里面拖曳按钮在界面上的情况,如果使用代码布局也是可以的

    QPushButton* btnHole = new QPushButton("Hole");
    pButtonGroup->addButton(btnHole);
    pButtonGroup->setId(btnHole, 0);
    //...
    //以此类推,new出后面的几个按钮

	//很重要的一点,如果需要这些按钮有不同的状态,需要将这些按钮设置属性checkble为true,要不然通过checkedId()方法获取不到选中的按钮Id,
	这些也是要通过自己的需求确定,自己选择。
	connect(pButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(slot_btnGroupClicked(int)));

	//当然也可以指定选中的按钮
    int nSelectBtn = 1;
    QPushButton *btn = qobject_cast<QPushButton*> (buttonGroup->button(nSelectBtn));
    btn->setChecked(true);

槽函数的实现:

	void Class T:: slot_btnGroupClicked(int nId)
	{
	    //do somethings...
	}

如果我们需要使用QButtonGroup和QStackedWidget来实现类似tab的功能,那么:

	QStackedWidget *m_pStackedWidget;
m_pStackedWidget = new QStackedWidget(this);
for(int nIndex = 0; nIndex < 4; nIndex++)
{
    QWidget* pWidget = new QWidget();
    pWidget->setObjectName(QString("..."));
    m_pStackedWidget->addWidget(pWidget);
    /**这儿也可以用insertWidget来代替addWidget,能够指定pWidget的id,如果使用addWidget方法,则需要和QButtonGroup的按钮的添加顺序一一对应,要不然就会出现页面错乱的现象**/
    
    //m_pStackedWidget->insertWidget(nIndex, pWidget);
}

槽函数实现:

void Class T:: slot_btnGroupClicked(int nId)
{
    m_pStackedWidget->setCurrentIndex(nId);
}

以上是QButtonGroup的部分用法,能够实现的功能还是比较多的,需要在需求中合理的选择。

QButtonGroup是一个Qt框架的类,用于管理一组按钮。它可以用于实现多个按钮的单选功能,也可以与其他控件结合使用,例如QStackedWidget,实现类似选项卡的效果。\[1\] 使用QButtonGroup的主要步骤如下: 1. 创建QButtonGroup对象,并设置互斥模式(即只能选择一个按钮)。 2. 使用addButton()方法将按钮添加到按钮组,并为每个按钮分配一个唯一的id。 3. 可以通过Qt Designer拖拽按钮到界面上,然后使用addButton()方法将按钮添加到按钮组,也可以通过代码创建按钮并添加到按钮组。 4. 如果需要获取选的按钮的id,需要将这些按钮的checkable属性设置为true。 5. 可以通过buttonClicked()信号连接到槽函数,以便在按钮被点击时执行相应的操作。 6. 可以通过button()方法获取指定id的按钮,并设置其为选状态。 更多关于QButtonGroup的详细用法可以参考Qt系列教程的相关章节。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Qt QButtonGroup用法](https://blog.csdn.net/tax10240809163com/article/details/92708983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[Qt 教程之Widgets模块] —— QButtonGroup抽象容器](https://blog.csdn.net/maizousidemao/article/details/127643027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值