C++/QT按比例调整Qdockwidget的初始大小:使用resizedocks函数

Qdockwidget的初始大小总是不尽如人意。

网上常见的方法:

  1. 直接通过geometry或者setGeometry设置,根本没有用
  2. resize方法,也没有用。
  3. 调用QDockWidget的setMaximumSize()和setFixedSize()函数来实现初始大小的定制,但是这相当于卡死了窗口的大小范围,非常难受
  4. 各种曲线救国策略,基本都是继承QWidget基类新建一个类,在新建类中更新自己的geometry,或者动态调节MaximumSize。如 这个, 这个,或者 这个。

Qt5.6之后

在Qt5.6之后,这个问题得到了解决,使用QMainWindow::resizeDocks函数即可实现Qdockwidget大小的初始化。
假设你有三个同级的Qdockwidget分别叫dock1,dock2,dock3,你希望它们在主窗体中按1:6:3的比例水平排列,只需要:

void QMainWindow::initDockSize(){
    QList<QDockWidget*> temp_docklist;
        temp_docklist << dock1;
        temp_docklist << dock2;
        temp_docklist << dock3;
    QList<int> temp_sizelist;
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.1);
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.6);
        temp_sizelist<< static_cast<int>(this->geometry().width() * 0.3);
    this->resizeDocks(temp_docklist, temp_sizelist, Qt::Horizontal);
}
temp_docklist:要调整的一组QDockWidget
temp_sizelist:要调整到的一组像素值
Qt::Horizontal:横向调整,也可使用Qt:Vertical进行纵向调整。默认为纵向。

resizeDocks这个函数能帮你将temp_docklist中“一系列QDockWidget”的大小,按照Qt::Horizontal(即横向)的方向,分别调整为temp_sizelist中对应的值,以像素为单位。

this->geometry().width() * 0.1是获取当前窗口宽度的值的10%,然后使用static_cast将其转化为整形。你也可以改成其他的任意数值。

具体可以查阅官方文档。

你可能感兴趣的:(Qt,qt,c++,开发语言)