平时写程序时也没有注意到这么多东西,只知道实现功能即可,有时候写的代码又冗余又垃圾,以致于后期的维护以及再续开发时遇到各种各样的问题,实现起来需要修改很多地方,比如这个单选框与复选框的问题,以前我做的都是用chechbox来实现,根据不同的clicked事件来限制选择,那样做又麻烦又不容易后期的维护。
在Qt GUI中,单选框类是QRadioButton,复选框类是QCheckBox。它们都是QAbstractButton的派生类。
QCheckBox一般都很好用,这个用起来也很顺手,
QRadioButton其实作为单选框来说是最好的选择。
用
QRadioButton首先要做一个
QButtonGroup 来将
QRadioButton添加进去,
QRadioButton * NTPTime = new QRadioButton(QString::fromUtf8("NTP server"));//NTP服务
QRadioButton * computerTime = new QRadioButton(QString::fromUtf8("computer time"));//电脑时间
QRadioButton * setTime = new QRadioButton(QString::fromUtf8("manually"));//手动
buttonGroup = new QButtonGroup();
buttonGroup->addButton(NTPTime,0);
buttonGroup->addButton(computerTime,1);
buttonGroup->addButton(setTime,2);
把想要的按键与它所对应的ID号对应起来了,每一次点击按键时QButtonGroup都会信号buttonClicked (int
ID)发射,通过判断ID的槽与其连接,就可以实现按键的判断了。
connect(buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(buttonGroupChanged(int)));
void TimeSetting::buttonGroupChanged(int id)
{
switch(id)
{
case 0:
NTPServerAddr->setEnabled(true);
NTPPort->setEnabled(true);
TimingInterval->setEnabled(true);
setTimeEdit->setEnabled(false);
break;
case 1:
NTPServerAddr->setEnabled(false);
NTPPort->setEnabled(false);
TimingInterval->setEnabled(false);
setTimeEdit->setEnabled(false);
break;
case 2:
NTPServerAddr->setEnabled(false);
NTPPort->setEnabled(false);
TimingInterval->setEnabled(false);
setTimeEdit->setEnabled(true);
break;
default :break;
}
}