1、如果QT是利用eglfs平台,直接配置下面即可。
export QT_ROOT=/usr/local/Qt-5.15.8/
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/lib/cedarx/:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export LD_PRELOAD=/usr/lib/libts.so
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export TSLIB_TSDEVICE=/dev/input/event0
export QT_QPA_PLATFORM=eglfs
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_EGLFS_ROTATION=180 //表示旋转180度。
export QT_QPA_FB_HIDECURSOR=1
2、如果QT是利用linuxfb平台,通过上面的方法并不能旋转屏幕。可以通过修改QT源码的qlinuxfbscreen.cpp文件实现。
QRegion QLinuxFbScreen::doRedraw()
{
QRegion touched = QFbScreen::doRedraw();
if (touched.isEmpty())
return touched;
if (!mBlitter)
mBlitter = new QPainter(&mFbScreenImage);
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
// 保存状态,避免影响其他绘制
mBlitter->save();
// 将坐标系原点移到屏幕中心,然后旋转180°
mBlitter->translate(mFbScreenImage.width(), mFbScreenImage.height());
mBlitter->rotate(180);
// 直接画 mScreenImage(无需额外生成 mirrored 图像)
for (const QRect &rect : touched)
mBlitter->drawImage(rect, mScreenImage, rect);
// 恢复坐标系
mBlitter->restore();
return touched;
}