c++ - 在 QT 中使用 QWidgets 和 QGroupBox 时不需要的填充

标签 c++ qt padding qtgui

我的一个 Widget 上有不需要的填充,这是个大问题。这是它的设置方式:

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

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

最佳答案

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

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

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

编辑:

我已将 .ui 和生成的代码包含在 .h 中,这些代码来 self 对您在评论中描述的布局进行的实验。

主窗口.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

关于c++ - 在 QT 中使用 QWidgets 和 QGroupBox 时不需要的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137246/

相关文章:

qt - Qt 5.1.1 : Remote path not set 上的树莓派

css - IE7 CSS 填充 Internet Explorer 7

c++ - 为什么 std::swap 不能在 std::aligned_union 上工作

c++ - boost 异质单位 - Bar per Minute

python - PyQt 进度条

qt - 打印不同尺寸的页面 - 确定打印机是否为 pdf

html - 你能调整 HTML 输入按钮的左右内边距吗?

html - 填充功能不正常,更改了百分比、ems 和像素

c++ - 无法使用 Nlohmann 的 JSON 获取对象内部的 vector

c++ - 如何使用已删除的复制构造函数初始化类数组(C++11)