QT窗口界面改变,自动调整大小,按钮,标签,widget等子控件自动变化

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;
}

小结

就是这么简单,对其他控件缩放一样的道理

上一篇:A1002 字符串长度


下一篇:WPF 动态添加带样式按钮