1、将在界面上布局好的buttons(并设置checkable属性为true)通过void QButtonGroup::addButton(QAbstractButton *button,int id)添加到QButtonGroup(并设置execlusive的属性为true:默认属性值为true)中,即可将添加到QButtonGroup中的buttons设置为互斥(即添加QButtonGroup中的按钮同时只有一个能被按下)。
2、信号 buttonClicked(...):鼠标左键按下并弹起才会触发;
信号buttonPressed(...):鼠标左键按下即可触发;
信号buttonReleased(...):鼠标左键松开即可触发;
从上面的三个信号中可获得按下按钮的地址或者ID。
Demo:
QHBoxLayout *pBtnLayout = new QHBoxLayout(this);
QPushButton *pOkBtn = new QPushButton(QString("OK"));
QPushButton *pCancelBtn = new QPushButton(QString("Cancel"));
QPushButton *pNewBtn = new QPushButton(QString("New"));
pOkBtn->setCheckable(true); //若button的checkable没有设置为true,互斥会不起效果
pOkBtn->setChecked(true); //若不设置,启动程序会看到没有button按下
pCancelBtn->setCheckable(true);
pNewBtn->setCheckable(true);
pBtnLayout->addWidget(pOkBtn);
pBtnLayout->addWidget(pCancelBtn);
pBtnLayout->addWidget(pNewBtn);
QButtonGroup *pBtnGroup = new QButtonGroup(this);
pBtnGroup->setExclusive(true);//可不必设置,默认exclusive属性为true
pBtnGroup->addButton(pOkBtn,BTN_OK);
pBtnGroup->addButton(pCancelBtn,BTN_CANCEL);
pBtnGroup->addButton(pNewBtn,BTN_NEW);
connect(pBtnGroup,SIGNAL(buttonClicked(int)),this,SLOT(OnBtnGroupClicked(int)));//连接信号和槽
//QActionGroup的小小使用
QToolBar *pToolBar = new QToolBar(QString("Test"),this);
// pToolBar->setToolButtonStyle(....) ;设置文字在图标的位置
QStringList ActionTextList; //存储action的标签的list
ActionTextList<<"Ok"<<"Cancel"<<"New";
for(int i = 0,j = ActionTextList.count();i<j;i++)
{
m_ToolBarActionList.append(new QAction(QString(ActionTextList.at(i)),pToolBar));
m_ToolBarActionList.at(i)->setCheckable(true);
}
m_ToolBarActionList.at(0)->setChecked(true);
pToolBar->addActions(m_ToolBarActionList);
//设置Actions之间的互斥属性
QActionGroup *pToolBarActionGroup = new QActionGroup(pToolBar);
// pToolBarActionGroup->setExclusive(true); 默认为true
for(int i = 0,j = m_ToolBarActionList.count();i<j;i++)
pToolBarActionGroup->addAction(m_ToolBarActionList.at(i));
// for(auto pAction : ToolBarActionList) //C++11 新特性VS2008暂不支持
// pToolBarActionGroup->addAction(pAction);
connect(pToolBar,SIGNAL(actionTriggered(QAction*)),this,SLOT(OnToolBarActionTriggered(QAction*)));