QT自适应窗口的一种实现

前言:

QT自身的自适应Layout运用起来,比较复杂,并且需要比较多的时间来调配置各种参数,特别是在原有界面上增加/减少一些控件时的修改,很多时候让人抓狂。本文介绍了一种比较方便的方法来实现这适应窗口大小。

这种方式简单来说就是在Widget创建时,把Widget的初始大小以及其中的控件及其初始大小记录下来,然后在Widget中重载resizeEvent,在此实现中根据Widget的当前大小与初始大小的比例,动态把其中的各控件进行放缩。

为了更方便的实现,可以把这个放缩功能定义在一个基类中,代码如下:

1. UsefulFunsEditor中定义一些公共性质的函数


//UsefulFunsEditor.h

#pragma once

#include <vector>

void NoteWidgetGeometry(std::vector<std::pair<QWidget*, QRect>>& tMap, QWidget* widget);
void ResizeWidget( QWidget* widget, const QRect& srcRect, float scale_x, float scale_y );
void ResizeWidgets( const std::vector<std::pair<QWidget*, QRect>>& tMap, const QSize& parentSrcSize, const QSize& parentDstSize )


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//UsefulFunsEditor.cpp

#include <QWidget>

//把控件保存入表中
void NoteWidgetGeometry(std::vector<std::pair<QWidget*, QRect>>& tMap, QWidget* widget)
{
	if( widget == nullptr )
	{
		return;
	}
	std::pair<QWidget*, QRect> tPair;
	tPair.first = widget;
	tPair.second = widget->geometry();
	tMap.push_back(tPair);
}

//控件放缩
void ResizeWidget( QWidget* widget, const QRect& srcRect, float scale_x, float scale_y )
{
	QRect tRect = srcRect;
	int top = tRect.top();
	int bottom = tRect.bottom();
	int left = tRect.left();
	int right= tRect.right();
	top *= scale_y;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值