Qt如何根据另一个组合框中的选定选项设置组合框的值

Qt如何根据另一个组合框中的选定选项设置组合框的值

问题描述:

我正试图构建一个需要从用户处获取各种输入的应用程序。输入选项根据所选的先前输入而有所不同。 事情是这样的: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:这只是一个样本设计所以我使用的是数字,字母作为例。请不要暗示用户界面的变化,以适应这个要求,因为这将超出我所做的范围。

编辑:根据以前的输入需要填充多个下拉列表;不只是两个。

您可以将第一个组合框的currentIndexChanged()信号连接到一个插槽,该插槽检查当前选择是“Numbers”还是“Alphabets”,并根据选定的内容为第二个实例化正确类型的QComboBox并取代它。

另一种选择是寿地方所有的QStackedWidget“命令”的各种组合框,然后在currentIndexChanged()从第一个下拉框,你检查当前的选择是什么,并切换到QStackedWidget包含匹配命令组合框的页面。

+0

第二种方法是否会在2个以上的下拉菜单中工作,即第三个下拉菜单需要使用前两个选择的值填充? –

+1

我不明白为什么不。只需将第三个钩住第二个信号,检查两者的值,然后选择第三个的值。 –

+0

另外,你可以详细说明如何实现第一个解决方案吗?我对Qt非常陌生,不熟悉插槽的概念。你的意思是使用Qt Creator底部的“信号和插槽编辑器”? –