QT 中DockWidget 是否只能放置在QMainWindow的 布局的Dock windows中??如果将DockWidget 嵌套放置在QMainWindow 的 Central widget 会怎样??
QDockWidget 浮动和不浮动对于底层来说有什么不同??
不是,可以放在QMainWindow 的 Central widget,只要是容器都可以
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);
}
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中放置,并且可以将其拖动到桌面上浮动,也可以关闭它。