如何使用Linux Framebuffer旋转Qt5应用程序?

6

我有一个嵌入式Linux应用程序直接在Linux帧缓冲区上运行(没有X窗口)。现在我们必须将显示器物理旋转180度。我该如何使我的Qt应用程序旋转,以便不会倒置?我看到参考使用以下选项:

 -platform linuxfb:fb=/dev/fb0:rotation:180 

然而,旋转选项似乎被忽略了。

在Ubuntu 16.04.6服务器上使用Qt 5.9.2


1
你尝试过进入左侧面板上的“项目”,然后选择“运行”,并将“QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation:180”添加到运行环境中吗? - Rick Pat
@RickPat 我在我的嵌入式系统上没有使用QT Creator,但我尝试了该环境变量,它对旋转也没有影响。 - KyleL
你好,你正在使用QWidget还是QML? - Rick Pat
@RickPat QWidgets - KyleL
1个回答

4

您可以在应用程序级别处理它。使用QML很容易,但是对于QWidgets,我能想到的最好方法是将小部件呈现在 QGraphicsScene 上并像这样旋转它:

#include "mainwindow.h"
#include <QApplication>

#include <QGraphicsScene>
#include <QGraphicsView>

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

    QGraphicsScene *scene = new QGraphicsScene();
    QGraphicsView *view = new QGraphicsView();
    view->setGeometry(w.geometry());
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    scene->addWidget(&w);
    view->setScene(scene);
    view->show();
    view->rotate(180);

    //w.show();

    return a.exec();
}

看起来有点故障,但你可以尝试一下。

此外,我认为正确的语法是 -platform linuxfb:fb=/dev/fb0:rotation=180 注意 = 而不是 : 编辑: 但这对我也没有什么影响。


1
这似乎是我需要的,谢谢!另外,rotation=180与rotation:180没有区别。看起来应该有比使用QGraphicsScene更简单的方法,但我会用可行的方法。 - KyleL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接