使用QRadioButtons的嵌套结构

时间:2016-12-06 08:01:14

标签: qt layout qradiobutton

我想实现类似这张图片的东西:

enter image description here

除了顶级(“地址栏”,“表格”和“用户名......”)应该是单选按钮。

这个想法是根据无线电按钮的状态启用或禁用子级别。并且副作用应该如图所示向右移动。

可以优雅地完成Qt吗?

2 个答案:

答案 0 :(得分:0)

我会说顶层有一个简单的QVBoxLayout,每个“sublevel”都有一个QHBoxLayout,其中一个固定大小的spacer项目作为第一个子项,一个QVBoxLayout包含子选项

然后可以通过禁用“sublevel”小部件来完成禁用所有子选项。

答案 1 :(得分:0)

只需将这些子项(例如"浏览历史记录","收藏夹",...)放入单独的QWidget并连接该窗口小部件&#39} QWidget::setEnabled()插入"地址栏"单选按钮的QAbstractButton::toggled()信号。

这是Qt Designer的 .ui 文件(有工作信号 - 插槽连接,在Designer中尝试 Ctrl + R )证明了这个想法:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>170</width>
    <height>178</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QRadioButton" name="radioButton">
     <property name="text">
      <string>RadioButton</string>
     </property>
     <property name="checked">
      <bool>true</bool>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QWidget" name="widget" native="true">
     <layout class="QVBoxLayout" name="verticalLayout_2">
      <item>
       <widget class="QCheckBox" name="checkBox">
        <property name="text">
         <string>CheckBox</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="checkBox_2">
        <property name="text">
         <string>CheckBox</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QCheckBox" name="checkBox_3">
        <property name="text">
         <string>CheckBox</string>
        </property>
       </widget>
      </item>
     </layout>
    </widget>
   </item>
   <item>
    <widget class="QRadioButton" name="radioButton_2">
     <property name="text">
      <string>RadioButton</string>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QRadioButton" name="radioButton_3">
     <property name="text">
      <string>RadioButton</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>radioButton</sender>
   <signal>toggled(bool)</signal>
   <receiver>widget</receiver>
   <slot>setEnabled(bool)</slot>
   <hints>
    <hint type="sourcelabel">
     <x>84</x>
     <y>17</y>
    </hint>
    <hint type="destinationlabel">
     <x>84</x>
     <y>77</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>