1.先看效果图
实现效果介绍:
启动/禁用按键为一组开关按键,点击任一个按键都会同时改变双方的点击状态,相较于只能单一点击其中一个按键改变单一按键的状态有很大优点。
2.代码实现
(1) 样式制作
效果图中的启动和禁用按键分别是QPushButton,这两个按键组成水平布局再加入到一个widget中,直接跳过。
按键样式
for(int i =0;i<2;i++){
button[i] = new QPushButton();
button[i]->setFixedSize(100,60);
QList <QString>list;
list<<"启动"<<"禁用";
button[i]->setText(list[i]);
button[i]->setFont(font3);
switch (i) {
case 0:
button[i]->setStyleSheet("QPushButton{background:#060C24;color:#FFFFFF;}”
"QPushButton{border-radius:5;border:0;}"
"QPushButton:pressed{background-color:#006EFF;}"
"QPushButton:checked{background-color:#006EFF;}");
break;
case 1:
button[i]->setStyleSheet("QPushButton{background:#060C24;color:#FFFFFF;}"
"QPushButton{border-radius:5;border:0}"
"QPushButton:pressed{background-color:#243058;}"
"QPushButton:checked{background-color:#243058;}");
break;
}
button[i]->setCheckable(true);
button[i]->setAutoExclusive(true);
}
(2)逻辑实现
首先一定要加入上图中最后两行代码,使得按键可以选中并仅有一个可以选中。
设置按键组,将启动/禁用按键都加进去按键组
QButtonGroup *BG;
BG->addButton(button[0]);
BG->addButton(button[1]);
先设置启动按键一开始就选中
button[0]->setChecked(true);
接着连接两个按键的槽函数,实现点击切换状态效果
启动按键点击槽函数:
connect(button[0],&QPushButton::pressed,[=](){
button[0]->setCheckable(true);
button[1]->setCheckable(true);
if(button[0]->isChecked()){
BG->setExclusive(false);
button[0]->setCheckable(false);
BG->setExclusive(true);
button[1]->setChecked(true);
}
});//设置启动按键,使得启动和禁用按键为一组,只有两种状态,点击任何一个双方状态都会改变
禁用按键点击槽函数:
connect(button[1],&QPushButton::pressed,[=](){
button[0]->setCheckable(true);
button[1]->setCheckable(true);
if(button[1]->isChecked()){
BG->setExclusive(false);
button[1]->setCheckable(false);
BG->setExclusive(true);
button[0]->setChecked(true);
}
}); //设置禁用按键,使得启动和禁用按键为一组,只有两种状态,点击任何一个双方状态都会改变
至此效果实现。