我正在尝试创建一个专门的QDockWidget
,其中包含一些我可以在其他Qt5用户界面中使用的内容。为此,我创建了一个QDockWidget
子类,其中包含一个名为SpecialDockWidget
的UI表单。内容(a QTreeWidget
)以UI形式添加。
在我的主用户界面中,我添加了SpecialDockWidget
作为QDockWidget
促销,推广了所需的停靠窗口小部件,所有内容都可以正常编译。但是,当我运行应用程序时,我提升的dock小部件在其标题栏中包含SpecialDockWidget
的标题,但内容仍为空。只有当停靠窗口小部件成为主UI(无论是浮动的还是附加的)的一部分时,才会发生这种情况,如果停靠窗口小部件本身作为顶级窗口小部件实例化,则会成功显示内容。
Qt文档说明了QDockWidget::setWidget()
:
如果在添加窗口小部件时可以看到停靠窗口小部件,则必须明确
show()
。请注意,在调用此函数之前,必须添加窗口小部件的布局;如果没有,小部件将不可见。
我尝试在show()
和内容上调用SpecialDockWidget
,并自行设置了布局,但内容仍未显示。
谁能告诉我自己可能做错了什么?
编辑:一些照片显示正在发生的事情:
停靠小部件代码:
#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;
}
主窗口代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// This produces the top-level dock widget
// SpecialDockWidget* w = new SpecialDockWidget();
// w->show();
}
MainWindow::~MainWindow()
{
delete ui;
}
答案 0 :(得分:1)
Error C2678 binary '==': no operator found which takes a left-hand operand of type 'std::vector<bool,std::allocator<_Ty>>' (or there is no acceptable conversion)
是在Designer中创建的,因此不太清楚如何将树添加到QDockWidget
。如果树只是QDockWidget
的孩子,那就不正确了。您必须使用QDockWidget
将树添加到QDockWidget
。
我建议不要使用Designer来创建QDockWidget::setWidget()
的子类,因为似乎无法正确添加内容。你可以做这样的事情。
QDockWidget
当然,如果您需要在Dock小部件中放置一个更复杂的小部件,您可以使用Designer创建内容作为简单的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();
}
子类,并以相同的方式将其添加到停靠小部件。 / p>
答案 1 :(得分:0)
我认为你的主窗口的构造函数应该是这样的,例如:
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);
}