[英]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.