QT启动时设定QDockWidget初始化窗口大小

这个功能是为了保留软件上一次的布局设置等信息,比如软件窗口上次的大小或坐标位置、停靠栏大小与位置、表格控件的行高列宽信息等等,从这些细节上优化易用性,在QT4与5中实现方法均不相同:

qt4:


// MainWindow.h
public slots:
	void OnRestoreCatalogueView();

public:	
	void loadCfg();
	void saveCfg();
	void setCatalogueViewSize(CDockWidget *pWidget, QSize size);


// MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
	QMainWindow(parent),
	ui(new Ui::MainWindow)
{
	ui->setupUi(this);
	
	// 这里做自己的初始化操作
	// ...
	loadCfg();
}

// 加载配置信息
void MainWindow::loadCfg()
{
	QSettints	qcfg("xx.ini", QSettints::IniFormat);
	QPoint		pos = qcfg.value("/MainWindow/pos").toPoint();
	QSize		mainSize = qcfg.value("/MainWindow/size").toSize();
	QSize		dockSize = qcfg.value("/MainWindow/dockSize").toSize();
	
	if(!pos.isNull() && pos.rx() != 0 && pos.ry() != 0)
		move(pos);
	
	if(!mainSize.isNull() && mainSize.width() > 0 && mainSize.height() > 0)
		resize(mainSize);
	
	setCatalogueViewSize(ui->dockWidget, dockSize);
}

// 保存配置信息
void MainWindow::saveCfg()
{
	QSettints	qcfg("xx.ini", QSettints::IniFormat);
	qcfg.setValue("/MainWindow/pos", pos());
	qcfg.setValue("/MainWindow/size", size());
	qcfg.setValue("/MainWindow/dockSize", ui->dockWidget->size());
}

// 更新最大最小尺寸
void MainWindow::OnRestoreCatalogueView()
{
	ui->dockWidget->setMinimumSize(QSize(1, 1));
	ui->dockWidget->setMaximumSize(QSize(16777215, 16777215));
}

void MainWindow::setCatalogueViewSize(CDockWidget *pWidget, QSize size)
{
	if(!pWidget)
		return;
	
	if(size.width() >= 0)
	{
		int	nWidth = pWidget->width();
		if(nWidth < size.width())
			pWidget->setMinimumWidth(size.width());
		else
			pWidget->setMaximumWidth(size.width());
	}
	
	if(size.height() >= 0)
	{
		int	nHeight = pWidget->height();
		if(nHeight < size.height())
			pWidget->setMinimumWidth(size.height());
		else
			pWidget->setMaximumWidth(size.height());
	}
	
	QTimer::singleShot(0, this, SLOT(OnRestoreCatalogueView()));
}

qt5.6以后有所变化,加载的时候QDockWidget不能再用setCatalogueViewSize初始化大小了,需要改为如下:

https://doc.qt.io/qt-5/qmainwindow.html#resizeDocks

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
// 加载配置信息
void MainWindow::loadCfg()
{
	QSettints	qcfg("xx.ini", QSettints::IniFormat);
	QPoint		pos = qcfg.value("/MainWindow/pos").toPoint();
	QSize		mainSize = qcfg.value("/MainWindow/size").toSize();
	QSize		dockSize = qcfg.value("/MainWindow/dockSize").toSize();
	
	if(!pos.isNull() && pos.rx() != 0 && pos.ry() != 0)
		move(pos);
	
	if(!mainSize.isNull() && mainSize.width() > 0 && mainSize.height() > 0)
		resize(mainSize);
	
	//setCatalogueViewSize(ui->dockWidget, dockSize);
	QList<QDockWidget*> 	dockList;
	QList<int> 				widthList;
	
	dockList << ui->dockWidget;
	widthList << dockSize.width();
	this->resizeDocks(dockList, widthList, Qt::Horizontal);
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值