首页 > 解决方案 > 如何管理 QDockWidget 上的布局?

问题描述

我正在开始使用 Qt,并且我的学校有一个项目。我想制作一个界面来读取空间数据库并显示它们。到目前为止,我可以在列表中显示表格,而我的实际目标是在双击时显示对象的详细信息。

为此,我尝试在双击对象时打开第二个停靠栏,并尝试在第二个停靠栏内进行布局以正确显示详细信息。

程序成功打开了一个新的dock,但是widget太小了,全部挤在dock的左上角:错误图片:

错误的图片

我试图不使用布局,而只使用带有 QDockWidget 的 setWidget,但它只显示最后一个小部件。

这是我的布局代码:

dock1 = new QDockWidget(tr("Caractéristiques de l'objet : "), this);
dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

QVBoxLayout* layout = new QVBoxLayout();
Nom_Objets = new QLineEdit(dock1);
layout->addWidget(Nom_Objets);
//dock1->setWidget(Nom_Objets);
Categorie_Objets = new QLineEdit(dock1);
layout->addWidget(Categorie_Objets);
//dock1->setWidget(Categorie_Objets);
Description_Objets = new QTextEdit(dock1);
layout->addWidget(Description_Objets);
//dock1->setWidget(Description_Objets);
setLayout(layout); 
addDockWidget(Qt::RightDockWidgetArea, dock1);

标签: c++qt

解决方案


如果要向 QDockWidget 添加多个小部件,则必须使用 QWidget 作为容器:

dock1 = new QDockWidget(tr("Caractéristiques de l'objet : "), this);
dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
addDockWidget(Qt::RightDockWidgetArea, dock1);

QWidget* container = new QWidget;
dock1->setWidget(container);
QVBoxLayout* layout = new QVBoxLayout(container);

Nom_Objets = new QLineEdit;
Categorie_Objets = new QLineEdit;
Description_Objets = new QTextEdit;

layout->addWidget(Nom_Objets);
layout->addWidget(Categorie_Objets);
layout->addWidget(Description_Objets);

推荐阅读