QDockWidgets合并不正确

时间:2016-05-02 00:10:10

标签: c++ qt user-interface qdockwidget qt5.6

我有一个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();
}

我可以点击上面提到的按钮创建两个DockerTwo QDockWidgets

但是,当我将一个QDockWidget拖到另一个上时,边框会消失,并且不会显示任何标签: Merges QDockWidgets

我期待以下情况发生:(通过产生多个QDockWidget来实现) Expected behaviour 我也注意到其中一个QDockWidget没有消失。相反,它合并回MainWindow。只有当他们是"前两个" QDockWidget秒。

是什么导致了这个问题以及如何解决?我想模仿this project

1 个答案:

答案 0 :(得分:1)

我猜它与QMainWindow :: GroupedDragging选项相关联。我很确定它没有它可以正常工作(我的意思是没有显示标签问题)。你对其他地方的码头位置有限制吗?文档暗示它可能会产生问题:http://doc.qt.io/qt-5/qmainwindow.html#DockOption-enum

对于样式问题,您可能需要在选项卡事件上重新定义它,因为一旦选项卡,窗口小部件可能会继承选项卡样式而不是您定义的停靠窗口小部件样式(根本不认证^^)

你可以尝试的最后一个猜测/事情,是从Dock标签开始,而不是浮动,看看你是否有任何新的行为,这是我在之前的项目中所做的事情,并且它运作良好。

很抱歉,暂时没有其他想法。