需求:
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(); }