博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT程序初始化时QDockWidget大小的调整方法
阅读量:4300 次
发布时间:2019-05-27

本文共 2515 字,大约阅读时间需要 8 分钟。

在QT中对于QDockWidget的resize()方法是无效的,因为QDockWidget的大小是由其中包含的控件决定的。在manual中这样说:

A QDockWidget acts as a wrapper for its child widget, set with setWidget(). Custom size hints, minimum and maximum sizes and size policies should be implemented in the child widget. QDockWidget will respect them, adjusting its own constraints to include the frame and title. Size constraints should not be set on the QDockWidget itself, because they change depending on wether it is docked; a docked QDockWidget has no frame and a smaller title bar.

因此在程序初始化时不能简单地使用resize()等方法调整QDockWidget大小。

 

使用QMainWindow的程序在程序初始化时调整QDockWidget为上次程序记录下来的大小的方法:

//MainWindow中读取上次QDockWidget大小,在MainWindow的构造函数中所有控件初始化完成后调用

void MainWindow::ReadSettings()

{
QCoreApplication::setOrganizationName("GLZN");
QCoreApplication::setOrganizationDomain("glzn.com");
QCoreApplication::setApplicationName("IEDClient");
QSettings setting;
setting.beginGroup(QString::fromUtf8("Catalogue View"));
QSize size = setting.value(QString::fromUtf8("lastRuntimeSize"),QSize(500,500)).toSize();
setCatalogueViewSize(size);
setting.endGroup();
}

//MainWindow中记录程序结束时QDockWidget的大小信息,在MainWindow的onCloseEvent()中调用。

void MainWindow::WriteSettings()

{
QSettings setting;
setting.beginGroup(QString::fromUtf8("Catalogue View"));
QSize size = ui->dockWidget_Catalogue->size();
setting.setValue(QString::fromUtf8("lastRuntimeSize"),size);
//记录下QDockWidget的原先的最大尺寸与最小尺寸
setting.setValue(QString::fromUtf8("oldMaxSize"),QSize(16777215,16777215));
setting.setValue(QString::fromUtf8("oldMinSize"),QSize(1,1));
setting.endGroup();
}

//ReadSettings中用于调整QDockWidget的函数

void MainWindow::setCatalogueViewSize(QSize size)

{
QDockWidget* dock = ui->dockWidget_Catalogue;
if (size.width()>= 0)
{
int nWidth = dock->width();
if (nWidth 
dock->setMinimumWidth(size.width());
else
dock->setMaximumWidth(size.width());
}
if (size.height()>= 0)
{
int nHeight = dock->height();
if (nHeight 
dock->setMinimumHeight(size.height());
else
dock->setMaximumHeight(size.height());
}
//如果只是设定最小宽度等信息会造成QDockWidget调整大小出现问题
QTimer::singleShot(0,this,SLOT(onRestoreCatalogueView()));
//需要在构造函数完成之后的事件循环中重新调整最小宽度等信息
return;
}

//MainWindow中响应重新设置最小宽度等信息。

void MainWindow::onRestoreCatalogueView()

{
QSettings setting;
QSize oldMaxSize = setting.value(QString::fromUtf8("oldMaxSize"),QSize(16777215,16777215)).toSize();
QSize oldMinSize = setting.value(QString::fromUtf8("oldMinSize"),QSize(1,1)).toSize();
ui->dockWidget_Catalogue->setMaximumSize(oldMaxSize);
ui->dockWidget_Catalogue->setMinimumSize(oldMinSize);
}
 

 

转载地址:http://jjxws.baihongyu.com/

你可能感兴趣的文章
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Mac 下docker路径 /var/lib/docker不存在问题
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>