gpt4 book ai didi

performance - 软浮 ARM 上的 Qt 图形性能?

转载 作者:行者123 更新时间:2023-12-04 02:32:57 25 4
gpt4 key购买 nike

我想创建一个类似汽车仪表盘的 Qt 界面(仪表、刻度盘、旋钮等)。我的设备有一个 800x480 LCD,由 imx287 ARM SoC(没有硬件 float 或 GPU 的 armv5te)供电。

我遇到的问题是速度非常慢。以 20fps 绘制的单个仪表(背景 PNG 图像,带有旋转的 PNG 刻度盘图像)使用约 20% 的 CPU 时间。添加单个呈现的文本字符串会使 CPU 使用率增加多达 40%。

我正在使用 QGraphicsScene,我使用了很多浮点计算...这是一个问题,因为我的 SoC 没有硬件 float 能力。

QGraphicsScene 是否有适合我的替代方案?

这是我目前正在做的:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

bg.load("rpm.png");
needle.load("needle.png");

scene = new QGraphicsScene(this);
scene->setSceneRect(0,0, 800,480);

scene->addPixmap(bg);

needleItem = scene->addPixmap(needle);
needleItem->setPos(400-4,17);

textItem = scene->addText(tr(""), QFont("utsaah", 50, QFont::Bold, true));
textItem->setDefaultTextColor(QColor(255,255,255));
textItem->setPos(430, 360);

ui->graphicsView->setScene(scene);

thread = new UpdateDialsThread(this);
connect(thread, SIGNAL(updateDials()), this, SLOT(updateDials()));
thread->start();
}

void MainWindow::updateDials(void)
{
static int deg = 180;

deg += 1;
if (deg > 180+270)
deg = 180;

QTransform trans;
trans.translate(needleItem->boundingRect().width()/2, needleItem->boundingRect().height());
trans.rotate(deg, Qt::ZAxis);
trans.translate(-needleItem->boundingRect().width()/2, -needleItem->boundingRect().height());
needleItem->setTransform(trans);

textItem->setPlainText(tr("%1").arg(deg*10, 4, 'f', 0));
}

提前致谢!

最佳答案

我建议使用 QML 而不是 QGraphicsView。您可以创建具有引人注目的动画和良好性能的自定义仪表。您还可以具有 Spring 和阻尼效果。你可以看看Dial Control Example .

关于performance - 软浮 ARM 上的 Qt 图形性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23260043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com