【问题标题】:QDockWidgets merging incorrectlyQDockWidgets 合并不正确
【发布时间】:2016-05-02 00:10:10
【问题描述】:

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

我可以通过点击上述按钮创建两个Dockers。

但是,当我将一个 QDockWidget 拖到另一个上时,边框消失并且没有标签显示:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 禁用QMainWindow::GroupedDragging 也会禁用标签,这是我想要实现的。我对其他地方的码头位置没有任何限制。
    • 我认为 GroupedDragging 意味着选项卡,但它不是强制性选项。如果我没记错的话,我所做的是创建所有停靠小部件,然后将它们放在标签中,感谢:mainWindow->tabifyDockWidget(prevDock, dock);
    • 您也可以查看这些链接以提供建议:link1link2
    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2017-11-04
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多