QtはComboBoxドロップダウンオプションを無効にします

この記事では、ComboBoxドロップダウンオプションを無効にする2つの方法を提供します。1つはすべてを無効にする方法、もう1つは個別に無効にする方法です。

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

表示効果は次のとおりです。

                                    

明らかに、シリアルポートを開くと、すべてのコンボボックスが無効になります。

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