Qt 按鍵控制combobox


需求:

1、按鍵控制combobox顯示下拉框,收起下拉框

2、按鍵控制combobox上下選取

3、按鍵控制combobox光標選取

4、combobox顯示滾動條

實現:

combobox初始化:

    //航次選擇
    font.setPointSize(14);
    ui->ComboBox_Voyage->setFont(font);
    ui->ComboBox_Voyage->setStyleSheet(QString::fromUtf8(ButtonUnFocus));
    ui->ComboBox_Voyage->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);//設置滾動條
    ui->ComboBox_Voyage->setAttribute(Qt::WA_DeleteOnClose);

按鍵處理:

void Display_PlayBack::key_Scan()
{
    QModelIndex itemIndex;
    //----------讀取全局變量中的按鍵信息----------//
    globeData->systemPara.mutex.lock();
    //主線程開啟一個按鍵讀取線程
    switch(globeData->systemPara.keyPressedValue)
    {
        case KEY_RETURN_SHORT:
        //1、判斷焦點所處位置
        //2、執行相應操作
        switch(flag_count)
        {
            case 1:
                break;
            case 2:
                break;
            case 3://按下combox
                if( ui->ComboBox_Voyage->isEnabled())//如果航次combox可以選取,那么執行以下操作
                {
                    bool_combox = !bool_combox;
                    if( true == bool_combox )
                    {
                        //ui->ComboBox_Voyage->QComboBox::showPopup();
                    }else
                    {
                        QStringList list = ui->ComboBox_Voyage->currentText().split(QString::fromUtf8("航次"));
                        str_voyage = list[1];
                        //ui->ComboBox_Voyage->QComboBox::hidePopup();
                        qDebug()<<"航次="<<str_voyage;
                    }
                }

                break;
            case 4:
                break;
            case 5:
                break;
            case 6:
                break;
            default:break;
        }

        break;
        case KEY_SET_SHORT:

        break;
            case KEY_Left:
            if(true == bool_combox )//如果選中combox
            {
                flag_combox--;
                if( flag_combox<=0 )flag_combox=ui->ComboBox_Voyage->count();//combox下拉項只有(搜索結果)個
                itemIndex = ui->ComboBox_Voyage->view()->model()->index(flag_combox-1,0);//combox視圖中下拉項編號
                ui->ComboBox_Voyage->view()->selectionModel()->select(itemIndex,QItemSelectionModel::SelectCurrent);//SelectCurrent
                ui->ComboBox_Voyage->setCurrentIndex(flag_combox-1);
                //combox視圖選中 固定編號的項目
            }else if(true == bool_label_speed)
            {
               ;
            }else//焦點匯聚到全局控件上
            {
                flag_count--;
                if(flag_count<=0)flag_count=6;
            }
            break;
        case KEY_Right:
            if(true == bool_combox)//如果選中combox
            {
                flag_combox++;
                if( flag_combox>=(ui->ComboBox_Voyage->count()+1) )flag_combox=1;
                itemIndex = ui->ComboBox_Voyage->view()->model()->index(flag_combox-1,0);//獲取位置
                ui->ComboBox_Voyage->view()->selectionModel()->select(itemIndex,QItemSelectionModel::SelectCurrent);//選中
                ui->ComboBox_Voyage->setCurrentIndex(flag_combox-1);//設置text //combox視圖選中 固定編號的項目
            }else if(true == bool_label_speed)
            {
                ;
            }else//焦點匯聚到全局控件上
            {
                flag_count++;
                if(flag_count>=7)flag_count=1;
            }
            break;
        case keyPressed_None:
            break;
        default:break;
    }
    globeData->systemPara.mutex.unlock();

} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM