【问题标题】:Unwanted padding when using QWidgets and QGroupBox in QT在 QT 中使用 QWidgets 和 QGroupBox 时不需要的填充
【发布时间】:2012-02-06 02:23:47
【问题描述】:

我在我的一个小部件上遇到了一个大问题,即不需要的填充。这是它的设置方式:

首先,我有一个 MainWindow,它的 QGridLayout 的边距、填充和 contentsMargins 都设置为 0。我在位置 0,0 上放置了一个 QGroupBox,在 0,1 上放置了一个我制作的 QWidget。 QWidget 是一个 QGridLayout (具有相同的边距等,全部设置为 0),并且在该布局中,我将 QGroupBox 放置在 0,0 上(其中包含我放置所有按钮的布局)和 1 上的另一个视图, 0。 MainMenu QGroupBox 和“测试”理论上应该对齐,因为我将所有填充和边距都删除为 0。右侧是小部件的原因是我可以轻松地将其替换为其他东西。

最奇怪的是,在窗口底部,MainMenu GroupBox 和右侧小部件对齐。只是在他们不见面的顶部。如果有人能解决我的问题,将不胜感激。我最后的办法是把 MainMenu 变成它自己的 Widget。感觉就像盒子感觉像一个孩子,MainMenu 在层次结构中更高。但这并不能解释为什么它们在底部对齐。

【问题讨论】:

    标签: c++ qt padding qtgui


    【解决方案1】:

    看起来包含“测试”组框的布局设置了上边距,所以我肯定会再次仔细检查。然后再检查一遍:)

    您是否可以将“测试”组框的字体设置为某些可能会导致问题的字体类型或大小?

    您是否正在应用可能会影响事物的样式表?

    编辑:

    我已经在 .h 中包含了 .ui 和生成的代码,这些代码来自我对您在 cmets 中所要求的布局进行的实验。

    ma​​inwindow.ui:

    <?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>376</width>
        <height>433</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
        <property name="margin">
         <number>0</number>
        </property>
        <property name="spacing">
         <number>0</number>
        </property>
        <item row="0" column="0">
         <widget class="QGroupBox" name="groupBox">
          <property name="title">
           <string>GroupBox</string>
          </property>
          <property name="flat">
           <bool>false</bool>
          </property>
         </widget>
        </item>
        <item row="0" column="1">
         <widget class="QWidget" name="widget" native="true">
          <layout class="QGridLayout" name="gridLayout_2">
           <property name="margin">
            <number>0</number>
           </property>
           <property name="spacing">
            <number>0</number>
           </property>
           <item row="0" column="0">
            <widget class="QGroupBox" name="groupBox_2">
             <property name="title">
              <string>GroupBox</string>
             </property>
             <property name="alignment">
              <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
             </property>
             <property name="flat">
              <bool>false</bool>
             </property>
            </widget>
           </item>
           <item row="1" column="0">
            <widget class="QWidget" name="widget_2" native="true"/>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menuBar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>376</width>
         <height>21</height>
        </rect>
       </property>
      </widget>
      <widget class="QToolBar" name="mainToolBar">
       <attribute name="toolBarArea">
        <enum>TopToolBarArea</enum>
       </attribute>
       <attribute name="toolBarBreak">
        <bool>false</bool>
       </attribute>
      </widget>
      <widget class="QStatusBar" name="statusBar"/>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>
    

    ..ui_mainwindow.h 中有趣的部分

    public:
        QWidget *centralWidget;
        QGridLayout *gridLayout;
        QGroupBox *groupBox;
        QWidget *widget;
        QGridLayout *gridLayout_2;
        QGroupBox *groupBox_2;
        QWidget *widget_2;
        QMenuBar *menuBar;
        QToolBar *mainToolBar;
        QStatusBar *statusBar;
    
        void setupUi(QMainWindow *MainWindow)
        {
            if (MainWindow->objectName().isEmpty())
                MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
            MainWindow->resize(376, 433);
            centralWidget = new QWidget(MainWindow);
            centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
            gridLayout = new QGridLayout(centralWidget);
            gridLayout->setSpacing(0);
            gridLayout->setContentsMargins(0, 0, 0, 0);
            gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
            groupBox = new QGroupBox(centralWidget);
            groupBox->setObjectName(QString::fromUtf8("groupBox"));
            groupBox->setFlat(false);
    
            gridLayout->addWidget(groupBox, 0, 0, 1, 1);
    
            widget = new QWidget(centralWidget);
            widget->setObjectName(QString::fromUtf8("widget"));
            gridLayout_2 = new QGridLayout(widget);
            gridLayout_2->setSpacing(0);
            gridLayout_2->setContentsMargins(0, 0, 0, 0);
            gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
            groupBox_2 = new QGroupBox(widget);
            groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
            QFont font;
            font.setFamily(QString::fromUtf8("MS Shell Dlg 2"));
            font.setPointSize(8);
            font.setBold(false);
            font.setWeight(50);
            font.setKerning(true);
            groupBox_2->setFont(font);
            groupBox_2->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
            groupBox_2->setFlat(false);
    
            gridLayout_2->addWidget(groupBox_2, 0, 0, 1, 1);
    
            widget_2 = new QWidget(widget);
            widget_2->setObjectName(QString::fromUtf8("widget_2"));
    
            gridLayout_2->addWidget(widget_2, 1, 0, 1, 1);
    
    
            gridLayout->addWidget(widget, 0, 1, 1, 1);
    
            MainWindow->setCentralWidget(centralWidget);
            menuBar = new QMenuBar(MainWindow);
            menuBar->setObjectName(QString::fromUtf8("menuBar"));
            menuBar->setGeometry(QRect(0, 0, 376, 21));
            MainWindow->setMenuBar(menuBar);
            mainToolBar = new QToolBar(MainWindow);
            mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
            MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
            statusBar = new QStatusBar(MainWindow);
            statusBar->setObjectName(QString::fromUtf8("statusBar"));
            MainWindow->setStatusBar(statusBar);
    
            retranslateUi(MainWindow);
    
            QMetaObject::connectSlotsByName(MainWindow);
        } // setupUi
    

    【讨论】:

    • 一切都设置为 0。我意识到我必须与窗口的层次结构有关。我现在只是在一个小部件的左侧,还有一些其他的东西。它们现在最终位于窗口中的同一层。
    • 我尝试复制您使用 QtCreator 描述的布局,但没有出现垂直偏移问题。
    • 你能给我看一下代码吗?真的很想找出我做错了什么:)
    • 我已经包含了 .ui 并从 QtDesigner 生成了 .h。
    • 您是否尝试过以编程方式执行此操作?我已将所有内容设置为 0,甚至已进行了 dubbelchecked。没有任何迹象表明为什么会出现间距。我仍然相信这与右侧主小部件内部的 QBoxWidget 最终在层次结构中低于左侧的 QBoxWidget 仅是 centralWidget 的直接子级(而不是“孙子级”)有关)。这一定会对小部件的显示方式产生一些影响,因为如果你开始将它们放在一起,QGroupBox 会变得越来越小。
    猜你喜欢
    • 2012-09-17
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2020-11-28
    • 2014-04-05
    • 2016-08-08
    相关资源
    最近更新 更多