簡體   English   中英

Qt-為什么我的窗口小部件不能使用拆分器內的垂直布局排列?

[英]Qt - Why won't my widgets line up using a vertical layout inside a splitter?

如下面的屏幕截圖所示,為什么我的小部件不使用拆分器內的垂直布局排列?

窗口截圖

/********************************************************************************
** Form generated from reading UI file 'test.ui'
**
** Created: Tue Apr 12 16:51:51 2011
**      by: Qt User Interface Compiler version 4.6.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_TEST_H
#define UI_TEST_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLineEdit>
#include <QtGui/QListWidget>
#include <QtGui/QMainWindow>
#include <QtGui/QSplitter>
#include <QtGui/QTreeWidget>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QGridLayout *gridLayout;
    QSplitter *splitter;
    QTreeWidget *treeWidget;
    QWidget *widget;
    QVBoxLayout *verticalLayout;
    QLineEdit *lineEdit;
    QListWidget *listWidget;

    void setupUi(QMainWindow *MainWindow)
    {
    if (MainWindow->objectName().isEmpty())
        MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
    MainWindow->resize(800, 600);
    centralwidget = new QWidget(MainWindow);
    centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
    gridLayout = new QGridLayout(centralwidget);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    splitter = new QSplitter(centralwidget);
    splitter->setObjectName(QString::fromUtf8("splitter"));
    splitter->setOrientation(Qt::Horizontal);
    treeWidget = new QTreeWidget(splitter);
    QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem();
    __qtreewidgetitem->setText(0, QString::fromUtf8("1"));
    treeWidget->setHeaderItem(__qtreewidgetitem);
    treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
    splitter->addWidget(treeWidget);
    widget = new QWidget(splitter);
    widget->setObjectName(QString::fromUtf8("widget"));
    verticalLayout = new QVBoxLayout(widget);
    verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
    verticalLayout->setContentsMargins(0, 0, 0, 0);
    lineEdit = new QLineEdit(widget);
    lineEdit->setObjectName(QString::fromUtf8("lineEdit"));

    verticalLayout->addWidget(lineEdit);

    listWidget = new QListWidget(widget);
    listWidget->setObjectName(QString::fromUtf8("listWidget"));

    verticalLayout->addWidget(listWidget);

    splitter->addWidget(widget);

    gridLayout->addWidget(splitter, 0, 0, 1, 1);

    MainWindow->setCentralWidget(centralwidget);

    retranslateUi(MainWindow);

    QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_TEST_H

這只是出於問題目的在此處上傳的虛擬ui。 在我真正的ui設計中,我嘗試了所有可以想象的組合,但是一旦我開始使用分離器,所有這些都將無法對齊。

我拉起設計師,使您的布局完全沒有問題。 如屏幕快照右上方的層次結構所示,我創建了行編輯和文本編輯。 以垂直布局加入那些。 創建了一個treeWidget,並將其與水平拆分器中的布局結合在一起。

通過編輯垂直布局屬性,我可以使它看起來像您一樣,從而使布局邊距為非零。 但是看起來生成的代碼在您的代碼中明確將其設置為零...

小部件在這里排列

您正在創建布局,但從未分配它們。

如果您希望小部件在拆分器中垂直對齊,則需要為拆分器設置垂直布局,然后將所有子小部件添加到布局中。

確保樹控件和具有垂直布局的控件都具有相同的大小策略 (例如QSizePolicy :: MinimumExpanding )。

分隔符右側的小部件(包含QLineEdit和QListWidget的小部件)可能具有默認的布局值。 在QtCreator中,選擇QWidget,然后在屬性編輯器中,一直向下滾動到“布局”部分,並將layoutLeftMargin,layoutTopMargin,layoutRightMargin和layoutBottomMargin的4個值設置為0。

確保verticalLayout沒有空白(默認情況下沒有空白)。

verticalLayout-> setContentsMargins(0,0,0,0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM