首页 > 解决方案 > 如何允许 QDockWidget 停靠到多个 QMainWindow 实例

问题描述

我有一个带有多个 QMainWindows 的 Qt5.11.0 应用程序(在 OSX10.13 和 CentOS7.4 上)。我希望用户能够将应用程序中的任何给定 QDockWidget 停靠到任何 QMainWindow 实例中。

下面的示例代码显示了一个具有两个 QMainWindows 和一个 QDockWidget 的应用程序。我可以将 QDockWidget 与它所附加的第一个 QMainWindow 取消停靠和重新停靠,但是如果我将分离的 QDockWidget 悬停在第二个 QMainWindow 上,QDockWidget 和第二个 QMainWindow 会相互忽略,而不是像希望的那样停靠在一起:

#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QLabel>

int
main( int argc, char *argv[] ) {
    QApplication app( argc, argv );

    QMainWindow* mw1 = new QMainWindow();
    QMainWindow* mw2 = new QMainWindow();

    mw1->setWindowTitle( "Main Window 1" );
    mw2->setWindowTitle( "Main Window 2" );

    mw1->setCentralWidget( new QWidget() );
    mw2->setCentralWidget( new QWidget() );

    QDockWidget* dockWidget = new QDockWidget( "Stepchild", mw1 );
    QLabel* label = new QLabel( "Hello World" );
    dockWidget->setWidget( label );

    mw1->addDockWidget( Qt::LeftDockWidgetArea, dockWidget );

    mw1->show();
    mw2->show();

    QRect first = mw1->geometry();
    int pixeloffset = 200;
    mw2->setGeometry( first.x() + pixeloffset, 
                      first.y() + pixeloffset, 
                      first.width(), 
                      first.height() );

    return app.exec();
}

如何让上面的 QDockWidget 停靠在应用程序中的任何 QMainWindows 中?

谢谢 -

标签: qtqt5qdockwidget

解决方案


推荐阅读