一、需求描述
在界面的不同区域显示不同模块内容。比如:UI界面左侧需要显示功能,右侧显示拓扑、浏览器页面等。
二、目标样式
三、解决方案
由最顶层QWidget布局转为QMainWindow布局。利用QMainWindow中的QDockWidget控件来实现界面不同区域显示不同模块内容。
四、实现代码
void MainWindow::webWidgetDisplay()
{
this->takeCentralWidget();//去掉中间控件
QDockWidget *dockLeft = new QDockWidget();
dockLeft->setFeatures(QDockWidget::NoDockWidgetFeatures);// 设置为不可关闭、移动、浮动
dockLeft->setWidget(ui->tabWidget);
addDockWidget(Qt::LeftDockWidgetArea, dockLeft);
//右上放置浏览器子窗口
QDockWidget *dock = new QDockWidget();
dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
dock->setAllowedAreas(Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
dock->setMinimumSize(500,400);
dock = new QDockWidget();
dock->setFeatures(QDockWidget::DockWidgetMovable| QDockWidget::DockWidgetFloatable);
//指定停靠窗体的样式,此处为可移动
dock->setAllowedAreas(Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
QTextEdit *text1 = new QTextEdit();
text1->setText(tr("窗口2"));
dock->setWidget(text1);
addDockWidget(Qt::RightDockWidgetArea,dock);
setDockNestingEnabled(false);//禁止Dock嵌套
}