QDockWidget

QT 中DockWidget 是否只能放置在QMainWindow的 布局的Dock windows中??如果将DockWidget 嵌套放置在QMainWindow 的 Central widget 会怎样??

QDockWidget 浮动和不浮动对于底层来说有什么不同??

不是,可以放在QMainWindow 的 Central widget,只要是容器都可以


将DockWidget嵌套放置在QMainWindow的Central widget中,它将会被放置在主窗口的中央区域。此时,DockWidget将不再具有浮动和停靠的功能,只能作为一个固定的部件存在于主窗口中。

qdockwidget的定义就是浮动窗口,你浮动与不浮动对父窗体没有任何影响

  • 这篇博客: QT入门之QMainWindow中的 6 QDockWidget 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • QDockWidget类提供了一个特殊的窗口部件,它可以是被锁在 QMainWindow 窗口内部或者是作为顶级窗口悬浮在桌面上。
    它可以围绕在中心区域的四周
    ,即四个方向都可以放置,与工具栏类似。

    先看一个简单的示例:

    void MainWindow::showDockWidget(){
        dock1 = new QDockWidget(tr("dock1"),this);
        dock1->setFeatures(QDockWidget::DockWidgetMovable);
        dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
        QTextEdit *textEdit1=new QTextEdit();
        textEdit1->setText(tr("这是第一个 dockWidget,只能放在左部、右部,用户可以拖动位置"));
        dock1->setWidget(textEdit1);
        addDockWidget(Qt::RightDockWidgetArea,dock1);//默认在窗口的右部
    
        dock2 = new QDockWidget(tr("dock2"),this);
        dock2->setFeatures(QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetClosable);
        QTextEdit *textEdit2=new QTextEdit();
        textEdit2->setText(tr("这是第二个 dockWidget 只能放在下部、右部,用户可以将它拖出窗口,浮动在桌面上;也可以关闭它"));
        dock2->setWidget(textEdit2);
        addDockWidget(Qt::RightDockWidgetArea,dock2);
    }
    

    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    QDockWidget是一个特殊的窗口部件,在QT中可以被锁定在QMainWindow窗口内部,也可以作为顶级窗口悬浮在桌面上。它可以放置在中央区域的四周,即可以放置在左侧、右侧、上方和下方。在QMainWindow的布局中,可以使用addDockWidget方法将QDockWidget添加到Dock windows中。

    如果将QDockWidget嵌套放置在QMainWindow的Central widget中,嵌套的效果会导致QDockWidget的内容无法正常显示。因为QMainWindow的布局不支持将QDockWidget放置在Central widget中。

    对于底层来说,QDockWidget的浮动和非浮动方式有以下不同之处: - 浮动方式:当QDockWidget以浮动方式存在时,它可以被拖动出QMainWindow,浮动在桌面上,可以自由调整大小和位置。可以使用setFeatures方法设置QDockWidget的DockWidgetFloatable属性为true,允许用户将其浮动。 - 非浮动方式:当QDockWidget以非浮动方式存在时,它将被锁定在QMainWindow内部的Dock windows中,无法被拖动到桌面上。可以使用setFeatures方法设置QDockWidget的DockWidgetFloatable属性为false,将其设为不可浮动。

    下面是一个示例代码,展示了如何创建并添加QDockWidget到QMainWindow中的Dock windows中:

    void MainWindow::showDockWidget(){
        dock1 = new QDockWidget(tr("dock1"),this);
        dock1->setFeatures(QDockWidget::DockWidgetMovable);
        dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
        QTextEdit *textEdit1= new QTextEdit();
        textEdit1->setText(tr("这是第一个 dockWidget,只能放在左部、右部,用户可以拖动位置"));
        dock1->setWidget(textEdit1);
        addDockWidget(Qt::RightDockWidgetArea,dock1); // 将dock1添加到右边的Dock windows中
    
        dock2 = new QDockWidget(tr("dock2"),this);
        dock2->setFeatures(QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetClosable);
        QTextEdit *textEdit2 = new QTextEdit();
        textEdit2->setText(tr("这是第二个 dockWidget 只能放在下部、右部,用户可以将它拖出窗口,浮动在桌面上;也可以关闭它"));
        dock2->setWidget(textEdit2);
        addDockWidget(Qt::RightDockWidgetArea, dock2); // 将dock2添加到右边的Dock windows中
    }
    

    在这个示例中,dock1被设置为可移动的DockWidget,并且只能放置在左侧和右侧Dock windows的区域。dock2被设置为可漂浮和可关闭的DockWidget,可以在右侧和下方的Dock windows中放置,并且可以将其拖动到桌面上浮动,也可以关闭它。