知方号

知方号

linux Qt4.8屏幕旋转(横屏、竖屏)

linux下要实现应用程序屏幕可旋转,也就是可切换横屏竖屏,可参考:

方法一:利用 QGraphicsView 实现旋转,参照另一篇文章QGraphicsView旋转(横屏竖屏) 方法二:利用API QWSDisplay::setTransformation 完成界面整体的旋转,为此,需在 qt 编译 config时加上参数: -qt-gfx-transformed -qt-gfx-linuxfb

在 Qt 启动脚本 qtopia4 加上参数:

export QWS_DISPLAY="Transformed"

然后使用 QWSDisplay::setTransformation 设置,setTransformation 经过一系列转换和发送处理之后,会到 qapplication_qws.cpp static void setScreenTransformation(int screenNo, int transformation),再调用 void QApplicationPrivate::setScreenTransformation,再通过 setScreenTransformation 调用 qws_setScreenTransformation 调到 QTransformedScreen::setTransformation,在这个函数中会与物理设备做转换,QApplicationPrivate::setScreenTransformation会再调用一些函数更新界面,并调用 QApplication::desktop() 发送 resized 信号,至此旋转完成,代码可参考 demo :

#include "MainWindow.h"#include "ui_MainWindow.h"#include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow){ ui->setupUi(this); setWindowFlags(Qt::FramelessWindowHint); showFullScreen(); //QWSServer::setBackground(QColor(0,0,0,0)); //move(100,300); connect(QApplication::desktop(),SIGNAL(resized(int)),this,SLOT(TTTT(int))); QTimer * timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(Test())); timer->start(2000);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::Test(){ static int rotate = QTransformedScreen::None; qDebug()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。