Qt 禁用ComboBox下拉选项

本文提供连两种禁用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);

    

猜你喜欢

转载自blog.csdn.net/jac_chao/article/details/124022834
今日推荐