我有一个QDockWidget
类和一个QMainWindow
:
// docker.hpp
class Docker : public QDockWidget
{
Q_OBJECT
public:
Docker(QString title, QWidget* parent = 0);
}
// docker.cpp
Docker::Docker(QString title, QWidget* parent): QDockWidget(title, parent)
{
QWidget* widget = new QWidget(this);
widget.setMinimumSize(200, 200);
setWidget(widget);
widget->setStyleSheet("border:5px solid gray;");
setAllowedAreas(Qt::AllDockWidgetAreas);
}
// mainwindow.hpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent);
private slots:
void createDockers();
};
// mainwindow.cpp
MainWindow::MainWindow(QWidget* parent): QMainWindow(parent)
{
setDockOptions(dockOptions() |
QMainWindow::AllowTabbedDocks |
QMainWindow::GroupedDragging);
// The following line of code does not change the situation.
// setTabPosition(Qt::RightDockWidgetArea, QTabWidget::East);
// There are some other codes which connect a button to the void createDockers() method
}
void createDockers()
{
Docker* dock = new Docker("Docker", this);
dock->setFloating(true);
dock->show();
}
我可以通过单击上述按钮来创建两个
Docker
。但是,当我将一个
QDockWidget
拖到另一个上时,边框消失了,并且没有选项卡显示:我期望发生以下情况:(通过生成几个
QDockWidget
实现)我还注意到
QDockWidget
之一没有消失。相反,它合并回了MainWindow
。仅当它们是“前两个” QDockWidget
时,才会发生这种情况。是什么引起了这个问题以及如何解决呢?我正在尝试模仿this project。
最佳答案
我猜它链接到QMainWindow :: GroupedDragging选项。我很确定如果没有它,它也可以正常工作(我的意思是不显示选项卡问题)。您是否在其他地方对码头位置有限制?该文档暗示它可能会产生问题:http://doc.qt.io/qt-5/qmainwindow.html#DockOption-enum
对于样式问题,您可能需要在tab事件中重新定义它,因为一旦选项卡化,小部件可能会继承选项卡样式,而不是您定义的停靠小部件样式(完全未经验证^^)
您可以尝试的最后一个猜测/方法是,首先将选项卡标记在扩展坞上,然后再浮动以查看是否有任何新行为,这是我在上一个项目中所做的,并且运行良好。
抱歉,暂时没有其他想法。
关于c++ - QDockWidgets合并错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36973427/