QT实现窗口大小随分辨率变化而变化

注意:当前方法不适合Qt中的QOpenGLWidget、OpenGL等绘制,否则会卡顿。
先上三张效果图,分别是原窗口、等比放大窗口和等比缩小窗口。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
实现原理,就是借用QGraphicsView的缩放功能来实现的,并且做好QGraphicsView的防锯齿设置,就能完美的适应各种不同分辨率的显示器上了。
分辨率转换原理,如果窗口需要放在大分辨率的显示器上,需要将原窗口view大小调整到大分辨率的窗口对应的大小,然后将view进行scate放大;如果窗口需要放在小分辨率的显示器上,也需要将原窗口view大小调整到小分辨率的窗口对应的大小,需要将view进行scate缩小。
代码如下:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    QGraphicsView* view = new QGraphicsView;
    QGraphicsScene* scene = new QGraphicsScene();
    QGraphicsProxyWidget* wt = scene->addWidget(&w);
    view->setStyleSheet("background:transparent");
    view->setWindowFlag(Qt::FramelessWindowHint);
    view->setAttribute(Qt::WA_TranslucentBackground);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setScene(scene);
    view->setFocusPolicy(Qt::NoFocus); //防止焦点被View抢走,造成主界面事件失效。
    view->setFixedSize(800,600);//view->setFixedSize(1920,1080); 调整窗口显示大小,根据要显示的分辨率来。
    view->scale(800/1280.00,800/1280.00);     //将1280分辨率的窗口进行缩放到分辨率800的窗口上。
    view->setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
    view->move(0,0);
    view->show();

    return a.exec();
}
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值