QT窗口子控件根据窗口自适应变化而变化
使用前景
在某些情况下,使用布局达不到想要的效果,我们必须手动设置位置,在设置成功后,又想达到窗口可根据用户使用缩放进行缩放。这时就需要我们在代码去实现子控件的缩小(resizeEvent中)
代码详解
首先获取我们当前窗口宽高,在这之前我们需要记录我们原窗口大小 m_oldWidth ,m_oldHeight 。
第二步根据新的宽高/旧的宽高,求出缩放比例。
然后我们去获取我们所需要缩放的子控件,这里我获取了所有窗口上的按钮与标签。
通过迭代器去修改每个子控件的大小。
void Form_Main::resizeEvent(QResizeEvent *event)
{
int Width = ui->widget->width();
int Height = ui->widget->height();
float scaleX = Width*1.0/m_oldWidth*1.0;
float scaleY = Width*1.0/m_oldWidth*1.0;
QList<QPushButton*> buttonList = ui->widget->findChildren<QPushButton*>();
for(auto it=buttonList.begin();it!=buttonList.end();it++)
{
int oldX = it.i->t()->x();
int oldY = it.i->t()->y();
int oldW = it.i->t()->width();
int oldH = it.i->t()->height();
it.i->t()->move(oldX*scaleX, oldY*scaleY);
it.i->t()->resize(oldW*scaleX, oldH*scaleY);
}
QList<QLabel*>labelList = ui->widget->findChildren<QLabel*>();
for(auto it=labelList.begin();it!=labelList.end();it++)
{
int oldX = it.i->t()->x();
int oldY = it.i->t()->y();
int oldW = it.i->t()->width();
int oldH = it.i->t()->height();
it.i->t()->move(oldX*scaleX, oldY*scaleY);
it.i->t()->resize(oldW*scaleX, oldH*scaleY);
}
m_oldWidth = Width;
m_oldHeight = Height;
}
小结
就是这么简单,对其他控件缩放一样的道理