本文提供连两种禁用ComboBox下拉选项的方法,一种是全部禁用,一种是的单个禁用!
1 全部禁用
功能:使ComboBox无法选择下拉选项
实现:调用ComboBox父类QWidget的setEnabled()方法
// 禁用/启用下拉框
// status: true 为启用, false为禁用
// 封装成函数使用
void Widget::ban_All_comboxSelect(bool status)
{
ui->comboBox_comport->setEnabled(status);
ui->comboBox_dataBit->setEnabled(status);
ui->comboBox_stopBit ->setEnabled(status);
ui->comboBox_boudrate ->setEnabled(status);
ui->comboBox_checkBit ->setEnabled(status);
}
// 也可在Widget回调函数中单个使用
// true 为启用, false为禁用
ui->comboBox_comport->setEnabled(false);
为得到显示效果将其与QPushButton相关联,同时还将实现如下功能:
- 点击按钮显示“打开串口”,再次点击显示“关闭串口”
- 设置QLabel标签为圆形
- “打开串口”前面的标签显示为红色,关闭串口时掐面的标签显示为黑色
connect(ui->pushButton_serialPort,&QPushButton::clicked, [=](){
// 打开串口
if(serialPort_switch_flag == 0)
{
// 禁用下拉框
ban_All_comboxSelect(false);
//设置标签颜色
const QString label_style_red =
"min-width:30px;min-height:30px;max-width:30px;max-height:30px;border-radius:15px;border:1px solid black;background:red";
ui->label_openPortFlag->setStyleSheet(label_style_red);
// 改变按钮显示的数据
ui->pushButton_serialPort->setText("关闭串口");
serialPort_switch_flag = 1;
}else {
// 启用下拉框
ban_All_comboxSelect(true);
//设置标签颜色
ui->label_openPortFlag->setStyleSheet(label_style_balck);
// 改变按钮显示的数据
ui->pushButton_serialPort->setText("打开串口");
serialPort_switch_flag = 0;
}
});
显示效果如下:
显然,开启串口后所有ComboBox全部禁用!
2 单个选项禁用
功能:使某一个ComboBox的某一下拉选项无法选择
实现:调用ComboBox的setItemData()方法
// 禁用某一下拉框中的某一项
// combox 为需要操作的 QComboBox 对象
// index 为需要操作 QComboBox 对象的下拉项对应的索引
// status true为启用,false为禁用
void Widget::ban_Aitem_comboxSelect(QComboBox * combox,int index, bool status)
{
if(status)
{
QVariant v_enable(1 | 32);
combox->setItemData(index, v_enable, Qt::UserRole - 1);
}else {
QVariant v_disable(0);
combox->setItemData(index, v_disable, Qt::UserRole - 1);
}
}
调用方法:
connect(ui->pushButton_serialPort,&QPushButton::clicked, [=](){
// 打开串口
if(serialPort_switch_flag == 0)
{
// 禁用下拉框
// ban_All_comboxSelect(false);
ban_Aitem_comboxSelect(ui->comboBox_comport,1, false);
//设置标签颜色
const QString label_style_red =
"min-width:30px;min-height:30px;max-width:30px;max-height:30px;border-radius:15px;border:1px solid black;background:red";
ui->label_openPortFlag->setStyleSheet(label_style_red);
// 改变按钮显示的数据
ui->pushButton_serialPort->setText("关闭串口");
serialPort_switch_flag = 1;
}else {
// 启用下拉框
// ban_All_comboxSelect(true);
ban_Aitem_comboxSelect(ui->comboBox_comport,1, true);
//设置标签颜色
ui->label_openPortFlag->setStyleSheet(label_style_balck);
// 改变按钮显示的数据
ui->pushButton_serialPort->setText("打开串口");
serialPort_switch_flag = 0;
}
});
显示效果:
显然,开启串口后COM2无法选中!
注意头文件中的声明:
// 串口开关显示
unsigned char serialPort_switch_flag=0;
// 禁用下拉框所有选项
void ban_All_comboxSelect(bool status);
// 禁用下拉框某一选项
void ban_Aitem_comboxSelect(QComboBox * combox,int index, bool status);