Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QDockWidget将不显示内容_Qt_Widget - Fatal编程技术网

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();
}