0

我有一个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通过单击上述按钮, 我可以创建两个s。两个 QDockWidgets

但是,当我将一个QDockWidget拖到另一个上时,边框消失并且没有选项卡出现: 合并 QDockWidgets

我预计会发生以下情况:(通过产生几个QDockWidgets 来实现) 预期行为 我还注意到其中一个QDockWidgets 并没有消失。相反,它合并回MainWindow. 仅当它们是“前两个”时才会发生这种情况QDockWidget

是什么导致了这个问题以及如何解决它?我正在尝试模仿这个项目

4

1 回答 1

1

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

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

您可以尝试的最后一个猜测/事情是从带有选项卡的停靠栏开始,而不是浮动以查看您是否有任何新的行为,这是我在以前的项目中所做的,并且运行良好。

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

于 2016-05-02T09:22:06.080 回答