代码之家  ›  专栏  ›  技术社区  ›  Ben Jones Tim Goetz

自动排除如何处理带有嵌套小部件的qradiobutton?

  •  1
  • Ben Jones Tim Goetz  · 技术社区  · 8 年前

    我在建一个 QWidget 具有 QRadioButton 不同层次的。换句话说,我的小部件包含一些单选按钮和一个子部件(标记为 groupBox 在屏幕截图中)也包含单选按钮。

    radioButtonExample

    我的问题是:里面的单选按钮 分组框 似乎干扰了顶级单选按钮( radioButton_1 和 radioButton_2 ). 我想是的 正好一个 属于 单选按钮 和 单选按钮 在任何给定时间选中,但现在可以通过单击当前选中的单选按钮取消选中这些选项。

    我想出的解决办法是 setChecked(true) 发送给的信号处理程序 radioButton_1.clicked() 和 radioButton_2.clicked() ,但这看起来有点老套。

    connect(ui->radioButton_1, &RadioButton::clicked, [this]() {
        ui->radioButton_1.setChecked(true);
    });
    
    connect(ui->radioButton_2, &RadioButton::clicked, [this]() {
        ui->radioButton_2.setChecked(true);
    });
    

    有没有更好的方法来恢复功能?也许是一个类似于 setRadioButtonGroup({ui->radioButton_1, ui->radioButton_2}) .

    编辑:

    根据MCVE的要求,以下是表格 mainwindow.ui . 其他文件( mainwindow.cpp , main.cpp , mainwindow.h )只是在Qt Creator中创建QWidget应用程序时提供的样板。

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>400</width>
        <height>300</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QRadioButton" name="radioButton_1">
          <property name="text">
           <string>radioButton_1</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QRadioButton" name="radioButton_2">
          <property name="text">
           <string>radioButton_2</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QGroupBox" name="groupBox">
          <property name="title">
           <string>groupBox</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout_2">
           <item>
            <widget class="QRadioButton" name="radioButton_3">
             <property name="text">
              <string>radioButton_3</string>
             </property>
            </widget>
           </item>
           <item>
            <widget class="QRadioButton" name="radioButton_4">
             <property name="text">
              <string>radioButton_4</string>
             </property>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   J-Christophe    8 年前

    为了解决这个问题,我建议您创建一个 QButtonGroup 再加上四个单选按钮。

    见 https://doc.qt.io/qt-5/qbuttongroup.html