2012-02-04 169 views
2

我的一個Widget中存在一個不需要的填充問題。這是如何設置的:在QT中使用QWidgets和QGroupBox時不需要的填充

首先我有一個MainWindow,它有一個QGridLayout,margin,padding和contentsMargins都設置爲0.在這個位置上放置一個QGroupBox,並且在0,1上放置一個QWidget我做了。 QWidget繼續QGridLayout(具有相同的邊距等,全部設置爲0),並在該佈局中,我將QGroupBox放置在0,0(其中包含我放置所有按鈕的佈局)和另一個視圖,0。 MainMenu QGroupBox和「測試」在理論上應該是一致的,因爲我將所有填充和邊距都移除爲0.右邊是一個小部件的原因是我可以很容易地將其替換爲其他東西。

最奇怪的是,在窗口的底部,MainMenu GroupBox和右側的小部件是對齊的。只是在他們不見面的頂部。如果有人能解決我的問題,我會非常感激。我最後的手段是,但MainMenu到自己的Widget。感覺就像盒子感覺像是一個孩子,MainMenu在層次上更高。但這並不能解釋爲什麼他們在底部對齊。

回答

2

這當然看起來像含有「測試」組框佈局具有上邊距設置,所以我肯定會檢查再仔細。然後再次檢查:)

你可能已經設置了「測試」組框的字體爲某種字體類型或大小,可能會丟掉東西?

您是否正在應用可能影響事物的樣式表?

編輯:

我已經包括在.H了的.ui和生成的代碼從我的實驗,你形容爲在意見中的要求的佈局。

mainwindow.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> 

..interesting 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

一切都被設置爲0。我意識到,我必須有一些做的窗口層次結構。我現在只是在一個小部件的左手邊,以及其他一些東西。他們現在最終在窗口的同一層。 – chikuba 2012-02-04 23:30:10

+0

我試圖複製你的佈局,你使用QtCreator描述它,我沒有那個垂直偏移問題。 – 2012-02-05 06:55:45

+0

你能告訴我這個代碼嗎?真的想試圖找出我做錯了什麼:) – chikuba 2012-02-05 10:41:30