Qt QDockWidget将不显示内容
我正在尝试创建一个专门的Qt QDockWidget将不显示内容,qt,widget,Qt,Widget,我正在尝试创建一个专门的QDockWidget,其中包含一些内容,可以在其他Qt5 UI中使用。为此,我创建了一个名为SpecialDockWidget的子类,其中包含一个UI表单。内容(一个QTreeWidget)被添加到UI表单中 在我的主UI中,我添加了SpecialDockWidget作为QDockWidget升级,升级了所需的dock widget,一切都正常。但是,当我运行应用程序时,我升级的dock小部件在其标题栏中包含SpecialDockWidget的标题,但内容仍然为空。只有
QDockWidget
,其中包含一些内容,可以在其他Qt5 UI中使用。为此,我创建了一个名为SpecialDockWidget
的子类,其中包含一个UI表单。内容(一个QTreeWidget
)被添加到UI表单中
在我的主UI中,我添加了SpecialDockWidget
作为QDockWidget
升级,升级了所需的dock widget,一切都正常。但是,当我运行应用程序时,我升级的dock小部件在其标题栏中包含SpecialDockWidget
的标题,但内容仍然为空。只有当dock小部件成为主UI的一部分(无论是浮动的还是附加的)时才会发生这种情况,并且如果dock小部件本身被实例化为顶级小部件,则会成功显示内容
Qt文档对QDockWidget::setWidget()
)作了如下说明:
如果添加小部件时dock小部件可见,则必须显式显示它
请注意,在调用此函数之前,必须添加小部件的布局;否则,小部件将不可见
我尝试在SpecialDockWidget
和内容上调用show()
,并自己设置了布局,但内容仍然没有显示出来
谁能告诉我我可能做错了什么
编辑:一些照片显示正在发生的事情:
Dock窗口小部件代码:
#include "specialdockwidget.h"
#include "ui_specialdockwidget.h"
#include <QVBoxLayout>
SpecialDockWidget::SpecialDockWidget(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::SpecialDockWidget)
{
ui->setupUi(this);
}
SpecialDockWidget::~SpecialDockWidget()
{
delete ui;
}
我认为主窗口的构造函数应该如下所示,例如:
MainWindow::MainWindow(QWidget *parent)
:
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
SpecialDockWidget *w = new SpecialDockWidget();
// Add dock widget to the specified area of main window.
addDockWidget(Qt::LeftDockWidgetArea, w);
}
QDockWidget
是在设计器中创建的,因此不清楚如何将树添加到QDockWidget
。如果该树只是QDockWidget
的子树,则它是不正确的。必须使用QDockWidget::setWidget()
将树添加到QDockWidget
我建议不要使用设计器来创建QDockWidget
的子类,因为似乎无法正确添加内容。你可以这样做
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDockWidget *dw = new QDockWidget(this);
QTreeWidget* tw = new QTreeWidget(dw);
dw->setWidget(tw);
addDockWidget(Qt::LeftDockWidgetArea, dw);
dw->show();
}
当然,如果你需要在dock小部件中放入一个更复杂的小部件,你可以使用Designer将内容创建为一个简单的
QWidget
子类,并以相同的方式将其添加到dock小部件中。发布一些代码来显示小部件及其内容是如何创建的。网站现在不断覆盖我的编辑,所以:图1-dock小部件UI表单。图2-主窗口的最终结果。图3-dock widget作为顶级widget。因此,它应该添加到这里,而不是添加到主窗口UI表单中?@x6herbius,我在Qt Designer中从未这样做过,甚至不确定这是否可能。建议的代码演示了我自己将如何做到这一点。我计划通过Designer尽可能多地做这件事,这正是我在上面列出的QDockWidget的推广方式。我会试试你的方法,看看是否管用。这似乎管用,应该足够满足我的需要了。谢谢
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDockWidget *dw = new QDockWidget(this);
QTreeWidget* tw = new QTreeWidget(dw);
dw->setWidget(tw);
addDockWidget(Qt::LeftDockWidgetArea, dw);
dw->show();
}