前言:
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;

最低0.47元/天 解锁文章
4318

被折叠的 条评论
为什么被折叠?



