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);

    

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中的comboBox是一种下拉菜单控件,可以让用户从预定义的选项中进行选择。下面是一个简单的示例,演示如何在Qt中创建和使用comboBox。 首先,在Qt Creator中创建一个新的Qt Widgets应用程序项目。在主窗口中添加一个comboBox控件,然后在构造函数中为comboBox添加一些选项: ```c++ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->comboBox->addItem("Option 1"); ui->comboBox->addItem("Option 2"); ui->comboBox->addItem("Option 3"); } ``` 这将在comboBox中添加三个选项:Option 1、Option 2、Option 3。 接下来,我们可以为comboBox添加一个槽函数,以便在用户选择一个选项时进行处理。例如,以下槽函数将在用户选择一个选项时显示一个消息框: ```c++ void MainWindow::on_comboBox_activated(const QString &arg1) { QMessageBox::information(this, "Selection", "You selected " + arg1); } ``` 最后,我们需要将comboBox的activated信号连接到我们刚刚创建的槽函数。这可以在构造函数中完成: ```c++ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->comboBox->addItem("Option 1"); ui->comboBox->addItem("Option 2"); ui->comboBox->addItem("Option 3"); connect(ui->comboBox, SIGNAL(activated(QString)), this, SLOT(on_comboBox_activated(QString))); } ``` 现在,当用户选择comboBox中的一个选项时,将显示一个消息框,告诉他们他们选择了哪个选项

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Triumph++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值