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

时间:2017-06-19 06:38:09

标签: c++ qt user-interface combobox qt-creator

我正在尝试构建一个需要从用户那里获得各种输入的应用程序。输入选择取决于所选的先前输入。 像这样:

Image

因此,如果用户选择数字选项,则右组合框应显示数值。

Image

同样,如果选择Alphabet,它应该显示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:这只是一个示例设计,因此我使用Numbers,Alphabets作为示例。请不要建议更改UI以满足要求,因为这将超出我的工作范围。

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

1 个答案:

答案 0 :(得分:4)

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

另一种选择是将所有各种组合框放入QStackedWidget中的“Command”,然后从第一个组合框currentIndexChanged()放置当前选择的内容,并将QStackedWidget切换到包含匹配命令组合框的页面