C++ Qt-为什么赢了';我的小部件不是在拆分器中使用垂直布局排列吗?

C++ Qt-为什么赢了';我的小部件不是在拆分器中使用垂直布局排列吗?,c++,qt,widget,qt-designer,C++,Qt,Widget,Qt Designer,根据下面的屏幕截图,为什么我的小部件不在拆分器中使用垂直布局排列 /******************************************************************************** ** Form generated from reading UI file 'test.ui' ** ** Created: Tue Apr 12 16:51:51 2011 ** by: Qt User Interface Compiler version

根据下面的屏幕截图,为什么我的小部件不在拆分器中使用垂直布局排列

/********************************************************************************
** 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文件“test.UI”生成的表单
**
**创建时间:2011年4月12日星期二16:51:51
**作者:Qt用户界面编译器版本4.6.2
**
**警告!重新编译UI文件时,此文件中所做的所有更改都将丢失!
********************************************************************************/
#ifndef用户界面测试
#定义用户界面测试
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
QT_开始名称空间
类Ui_主窗口
{
公众:
QWidget*centralwidget;
QGridLayout*gridLayout;
QSplitter*分离器;
QTreeWidget*树宽;
QWidget*widget;
QVBoxLayout*垂直布局;
QLineEdit*lineEdit;
QListWidget*listWidget;
无效设置UI(QMainWindow*MainWindow)
{
如果(MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8(“MainWindow”);
主窗口->调整大小(800600);
centralwidget=新的QWidget(主窗口);
centralwidget->setObjectName(QString::fromUtf8(“centralwidget”);
gridLayout=新的QGridLayout(centralwidget);
gridLayout->setObjectName(QString::fromUtf8(“gridLayout”);
拆分器=新的QSplitter(centralwidget);
拆分器->setObjectName(QString::fromUtf8(“拆分器”);
拆分器->设置方向(Qt::水平);
treeWidget=新的QTreeWidget(拆分器);
QTreeWidgetItem*uu QTreeWidgetItem=新的QTreeWidgetItem();
__qtreewidgetitem->setText(0,QString::fromUtf8(“1”);
treeWidget->setHeaderItem(u qtreewidgetitem);
treeWidget->setObjectName(QString::fromUtf8(“treeWidget”);
拆分器->添加窗口小部件(树形窗口小部件);
widget=新的QWidget(拆分器);
widget->setObjectName(QString::fromUtf8(“widget”);
verticalLayout=新的QVBoxLayout(小部件);
verticalLayout->setObjectName(QString::fromUtf8(“verticalLayout”);
垂直布局->设置内容边缘(0,0,0,0);
lineEdit=新的QLineEdit(小部件);
lineEdit->setObjectName(QString::fromUtf8(“lineEdit”);
垂直布局->添加小部件(lineEdit);
listWidget=新的QListWidget(widget);
listWidget->setObjectName(QString::fromUtf8(“listWidget”);
垂直布局->添加小部件(列表小部件);
拆分器->添加小部件(小部件);
gridLayout->addWidget(拆分器,0,0,1,1);
主窗口->设置中心Widget(中心Widget);
重传(主窗口);
QMetaObject::connectSlotsByName(主窗口);
}//setupUi
无效重新传输(QMainWindow*MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate(“MainWindow”,“MainWindow”,0,QApplication::UnicodeTf8));
}//重新翻译
};
名称空间用户界面{
类主窗口:公共Ui_主窗口{};
}//名称空间用户界面
QT_END_名称空间
#endif//UI\u测试

这只是为了提问而上传到这里的一个虚拟用户界面。在我真正的ui设计中,我尝试了所有可以想象的组合,但一旦我开始使用拆分器,它就会失去一致性。

您正在创建布局,但从未分配它们


如果希望小部件在拆分器中垂直对齐,则需要为拆分器设置垂直布局,然后将所有子小部件添加到布局。

确保树小部件和具有垂直布局的小部件具有相同的布局(例如).

我启动了designer,毫无困难地完成了您的布局。如屏幕截图右上角的层次结构所示,我创建了行编辑和文本编辑。以垂直布局连接这些。创建了一个树形边缘,并将其与水平拆分器中的布局连接起来

我可以通过编辑垂直布局属性使它看起来像你的,这样就有了非零的布局边距。但看起来生成的代码在您的中显式地将其设置为零


拆分器右侧的小部件(包含QLineEdit和QListWidget的小部件)可能具有布局的默认值。在QtCreator中,选择QWidget,然后在属性编辑器中,一直向下滚动到布局部分,并将layoutLeftMargin、layoutTopMargin、layoutRightMargin和layoutBottomMargin的4个值设置为0。

确保verticalLayout没有边距(默认情况下有边距)


垂直布局->设置内容边缘(0,0,0,0)

我想我解释得很糟糕,我希望布局看起来和那里完全一样,但是树状图的顶部边缘和文本框要对齐。我不明白为什么在使用拆分器时,右侧垂直布局中的控件周围似乎有边距/填充,而左侧的树状边缘却没有?您可以发布.ui文件,以便我们可以在designer中打开它吗?