一、需求描述

在界面的不同区域显示不同模块内容。比如: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嵌套

}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐