Qt之应用程序分辨率自适应(字体、控件跟随变化)(转载)

在Qt里,每台电脑的分辨率不一样,比如说你的分辨率是1920*1080,那么到800*480就会有控件显示不完全,所以我们需要控件跟随变化。

我使用的方法较菜,Qt用的不熟

通过layout布局的方式对窗口的分辨率自适应,即将需要将自适应的控件添加进layout布局中,当layout的父对象的尺寸变化时,layout会根据父对象相应的变化宽、高比例对布局中的控件进行缩放,以此来实现相应控件的分辨率自适应。 

但是在QtCreator Designer中添加的layout存在一个问题,如下图在Designer中添加一个Vertical Layout,layout中添加两个PushButton,当运行程序后,调整程序大小,中间的PushButton并不会随着窗口大小而进行缩放。

这是因为在resize事件中,并没有对ui->verticalLayoutWidget进行拉伸,所以我们要重写resizeEvent的函数,

void MainWindow::resizeEvent(QResizeEvent *event)
{
    Q_UNUSED(event);
    QWidget * resizeWidget=ui->verticalLayoutWidget;
    QRect resizeRect=resizeWidget->rect();
    static float baseWidth=400;
    static float baseHeight=300;
    static float widgetWidth=resizeRect.width();
    static float widgetHeight=resizeRect.height();
    static float widgetX=ui->verticalLayoutWidget->geometry().x();
    static float widgetY=ui->verticalLayoutWidget->geometry().y();
    float horRatio=this->rect().width()/baseWidth;
    float verRatio=this->rect().height()/baseHeight;
    //dajust the position of verticalLayoutWidget
    resizeRect.setX(widgetX*horRatio);
    resizeRect.setY(widgetY*verRatio);

    //resize the verticalLayoutWidget
    resizeRect.setWidth(widgetWidth*horRatio);
    resizeRect.setHeight(widgetHeight*verRatio);
    //set Geometry
    resizeWidget->setGeometry(resizeRect);
}

利用layout对控件进行布局缩放使用简单,且无需关注内部细节,但是利用layout进行布局

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值