2023年12月6日发(作者:)

qtlinux横屏,linuxQt4.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_

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()<

QWSDisplay::setTransformation(rotate);

rotate += 1;

if(rotate > QTransformedScreen::Rot270){

rotate = QTransformedScreen::None;

}

}

void MainWindow::TTTT(int no)

{

//showMaximized();

qDebug()

}

.h就是这些函数声明而已,就不贴了,据我测试,QApplication::desktop::resized 信号发送过来,拿到的 size 和横屏竖屏是没关系的,

都是那么多,但是 MainWindow 可以拿到横屏竖屏的值。

*

{

font:50px;

}