如何使用 linux 帧缓冲区旋转 Qt5 应用程序?

Posted

技术标签:

【中文标题】如何使用 linux 帧缓冲区旋转 Qt5 应用程序?【英文标题】:How to rotate a Qt5 application using the linux framebuffer? 【发布时间】:2019-06-14 16:21:53 【问题描述】:

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

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

但是,旋转选项似乎被忽略了。

在 Ubuntu 服务器 16.04.6 上使用 Qt 5.9.2

【问题讨论】:

您是否尝试过进入左侧面板上的Projects,然后选择Run 并将QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation:180 添加到运行环境? @RickPat 我没有在我的嵌入式系统上使用 QT 创建器,但我尝试了那个环境变量,它对旋转也没有影响 好的,你用的是qwidgets还是qml? @RickPat QWidgets 【参考方案1】:

您可以在应用程序级别处理它。使用 QML 这很容易,但是使用 QWidgets,我能想到的最好的方法是在 QGraphicsScene 上渲染 Widget 并像这样旋转它:

#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 注意= 而不是: 编辑: 但这对我来说也没有什么不同。

【讨论】:

这似乎可以满足我的需求,谢谢!此外, rotation=180 与 rotation:180 没有区别。似乎应该有比使用 QGraphicsScene 更简单的方法,但我会选择可行的方法。

以上是关于如何使用 linux 帧缓冲区旋转 Qt5 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

linux内核中的帧缓冲区有新的骨架吗?

Qt 5.7:使用无头 QWebEngine

嵌入式Linux下完成LCD屏文字显示(帧缓冲框架)

如何从 Linux 帧缓冲区获取 RGB 像素值?

如何使用 TouchGFX 帧缓冲区仅镜像 x 轴

将如何绘制到 ds 的子显示,就好像它是一个帧缓冲区一样?