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	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* 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 (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的部分用法,能够实现的功能还是比较多的,需要在需求中合理的选择。

你可能感兴趣的:(Qt)