Qt的dockwidget非常好用,就是界面排布不是那么容易满足我们的要求。这里我介绍一种设置界面排布的方法,希望大家能从中获益。
目录
一、界面最大化并删除主界面只保留停靠界面
//窗口最大化
setWindowState(Qt::WindowMaximized);
//删除MainWindow的中间窗口,整个视图都由DockWidget组成
QWidget* p = takeCentralWidget();
if(p)delete p;
setDockNestingEnabled(true);
二、布置各个停靠界面的位置和大小
//添加所有需要布置的停靠界面
QList<QDockWidget*> m_docks;
m_docks.append(ui->dockWidget);
m_docks.append(ui->dockWidget_2);
m_docks.append(ui->dockWidget_3);
m_docks.append(ui->dockWidget_4);
//下面的布置有先后关系,最开始界面是一片空白,
//然后,先添加停靠界面0和停靠界面3,垂直排布
//然后,让界面0分为两半,左半是停靠界面0,右半是停靠界面2,水平排布
//最后,让界面3分为两半,左半是停靠界面3,右半是停靠界面4,水平排布
//停靠界面0和停靠界面3是垂直排布
splitDockWidget(ui->dockWidget,ui->dockWidget_3,Qt::Vertical);
//停靠界面0和停靠界面2是水平排布
splitDockWidget(ui->dockWidget,ui->dockWidget_2,Qt::Horizontal);
//停靠界面3和停靠界面4是水平排布
splitDockWidget(ui->dockWidget_3,ui->dockWidget_4,Qt::Horizontal);
//下面设置各个停靠界面的比例
float windowWidth=this->size().width();//获取窗口的宽度
int dockWidthA=0.5*windowWidth;
int dockWidthB=0.5*windowWidth;
//设置停靠界面0和停靠界面2的比例,为1:1,左右
QList<QDockWidget*> mm_docks;
mm_docks.append(ui->dockWidget);
mm_docks.append(ui->dockWidget_2);
QList<int> docksizes={dockWidthA,dockWidthB};
this->resizeDocks(mm_docks,docksizes,Qt::Horizontal);
//设置停靠界面3和停靠界面4的比例,为1:1,左右
QList<QDockWidget*> mm2_docks;
mm2_docks.append(ui->dockWidget_3);
mm2_docks.append(ui->dockWidget_4);
QList<int> docksizes2={dockWidthA,dockWidthB};
this->resizeDocks(mm2_docks,docksizes2,Qt::Horizontal);
//设置停靠界面0和停靠界面3的比例,为1:1,上下
QList<QDockWidget*> mm3_docks;
mm3_docks.append(ui->dockWidget_3);
mm3_docks.append(ui->dockWidget);
this->resizeDocks(mm3_docks,docksizes2,Qt::Vertical);
三、最终的效果