2017-06-19 101 views
1

我正試圖構建一個需要從用戶處獲取各種輸入的應用程序。輸入選項根據所選的先前輸入而有所不同。 事情是這樣的:Qt如何根據另一個組合框中的選定選項設置組合框的值

Image

因此,如果用戶選擇號碼選擇正確的組合框應該顯示數值。

Image

類似地,如果字母被選擇它應該顯示A,B,C等。

所以我需要列表是動態的所有下拉列表。我該怎麼做呢?

我正在使用Qt Creator以上。下面是的.ui文件的第一個組合框代碼:

widget class="QGroupBox" name="gbType"> 
    <property name="geometry"> 
    <rect> 
     <x>60</x> 
     <y>100</y> 
     <width>281</width> 
     <height>81</height> 
    </rect> 
    </property> 
    <property name="font"> 
    <font> 
     <pointsize>12</pointsize> 
    </font> 
    </property> 
    <property name="layoutDirection"> 
    <enum>Qt::LeftToRight</enum> 
    </property> 
    <property name="autoFillBackground"> 
    <bool>false</bool> 
    </property> 
    <property name="styleSheet"> 
    <string notr="true">border: 1px solid gray;</string> 
    </property> 
    <property name="title"> 
    <string extracomment="Type"/> 
    </property> 
    <widget class="QComboBox" name="cbType"> 
    <property name="geometry"> 
     <rect> 
     <x>20</x> 
     <y>30</y> 
     <width>241</width> 
     <height>27</height> 
     </rect> 
    </property> 
    <property name="editable"> 
     <bool>true</bool> 
    </property> 
    <item> 
     <property name="text"> 
     <string>Number</string> 
     </property> 
    </item> 
    <item> 
     <property name="text"> 
     <string>Alphabet</string> 
     </property> 
    </item> 
    </widget> 
    </widget> 

對於第二個組合框:

<widget class="QGroupBox" name="gbCommand"> 
    <property name="geometry"> 
    <rect> 
     <x>450</x> 
     <y>100</y> 
     <width>281</width> 
     <height>81</height> 
    </rect> 
    </property> 
    <property name="font"> 
    <font> 
     <pointsize>12</pointsize> 
    </font> 
    </property> 
    <property name="layoutDirection"> 
    <enum>Qt::LeftToRight</enum> 
    </property> 
    <property name="autoFillBackground"> 
    <bool>false</bool> 
    </property> 
    <property name="styleSheet"> 
    <string notr="true">border: 1px solid gray;</string> 
    </property> 
    <property name="title"> 
    <string/> 
    </property> 
    <property name="alignment"> 
    <set>Qt::AlignCenter</set> 
    </property> 
    <property name="flat"> 
    <bool>true</bool> 
    </property> 
    <property name="checkable"> 
    <bool>false</bool> 
    </property> 
    <widget class="QComboBox" name="cbCommand"> 
    <property name="geometry"> 
     <rect> 
     <x>20</x> 
     <y>30</y> 
     <width>241</width> 
     <height>27</height> 
     </rect> 
    </property> 
    <property name="editable"> 
     <bool>true</bool> 
    </property> 
    <property name="currentText"> 
     <string/> 
    </property> 
    <item> 
     <property name="text"> 
     <string>1</string> 
     </property> 
    </item> 
    <item> 
     <property name="text"> 
     <string>2</string> 
     </property> 
    </item> 
    <item> 
     <property name="text"> 
     <string>3</string> 
     </property> 
    </item> 
    </widget> 
    </widget> 

PS:這只是一個樣本設計所以我使用的是數字,字母作爲例。請不要暗示用戶界面的變化,以適應這個要求,因爲這將超出我所做的範圍。

編輯:根據以前的輸入需要填充多個下拉列表;不只是兩個。

回答

4

您可以將第一個組合框的currentIndexChanged()信號連接到一個插槽,該插槽檢查當前選擇是「Numbers」還是「Alphabets」,並根據選定的內容爲第二個實例化正確類型的QComboBox並取代它。

另一種選擇是壽地方所有的QStackedWidget「命令」的各種組合框,然後在currentIndexChanged()從第一個下拉框,你檢查當前的選擇是什麼,並切換到QStackedWidget包含匹配命令組合框的頁面。

+0

第二種方法是否會在2個以上的下拉菜單中工作,即第三個下拉菜單需要使用前兩個選擇的值填充? –

+1

我不明白爲什麼不。只需將第三個鉤住第二個信號,檢查兩者的值,然後選擇第三個的值。 –

+0

另外,你可以詳細說明如何實現第一個解決方案嗎?我對Qt非常陌生,不熟悉插槽的概念。你的意思是使用Qt Creator底部的「信號和插槽編輯器」? –

相關問題