qt 5 屏幕翻转问题

在Qt 5中,由于取消了qws并使用QGraphicsView,屏幕翻转存在一些挑战。本文介绍了两种方法:一种直接翻转界面及其子界面,但存在关闭问题和标题栏显示问题;另一种将所有控件放入单独的widget再进行翻转,解决了前一种方法的问题,但遇到QTableWidget滚动时控件不移动的难题。作者欢迎更好的翻转策略分享。

qt 5  取消了 qws,使用了 QGraphicsView,  这里提供了使用的一些方法,如果有更好的,欢迎大家指正。

方法一:

	
#include <QGraphicsScene>
#include <QGraphicsProxyWidget>
#include <QGraphicsView>

    MainWindow w;
    QGraphicsScene *scene = new QGraphicsScene;
    QGraphicsProxyWidget *widget = scene->addWidget(&w,  Qt::FramelessWindowHint);
    widget->setRotation(90);
    QGraphicsView *view = new QGraphicsView(scene);
    view->resize(1024, 600);
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->show();

这种, 只能翻转  界面本身和他的子界面。

  而且有几个缺点:1, w.close() 函数只能关闭 w, view它关不掉

     2,当要翻转对话框时 dlg.exec() , 变得无效了

     3,如果界面的子界面 想去掉标题栏 , 翻转之后,又会出现标题栏。到现在还没找到解决方法。


所以有了方法二,想将界面翻转放到界面内。


方法二:

先将界面中的所有控件放到 widget 中 并布局 ,就叫 m_widget_rorate吧, 翻转时就翻转这个widget

    this->layout()->removeWidget(ui->m_widget_rorate);


    QGraphicsScene *scene = new QGraphicsScene;
    QGraphicsProxyWidget *widget = scene->addWidget(ui->m_widget_rorate,  Qt::FramelessWindowHint);
    widget->setRotation(90);

    QGraphicsView *view = new QGraphicsView(scene);
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->resize(ui->m_widget_rorate->size());
    view->setFrameShape(QFrame::NoFrame);

    this->layout()->addWidget(view);

这下所有问题都解决了

但是,又出现一个问题,当界面里面有QTablewidget 时 ,  在格子里面放控件后, 滑动滑块,控件不跟着滑块移动。



如果以上有错误的地方,本人实力有限,大家请包涵,如果有更好的方法,谢谢回复



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值