首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt图形在软浮臂上的表现?

Qt图形在软浮臂上的表现?
EN

Stack Overflow用户
提问于 2014-04-24 04:46:17
回答 2查看 672关注 0票数 3

我想创建一个汽车仪表板类Qt接口(量规,拨号,旋钮等)。我的设备有一个由imx287 ARM SoC (没有硬件浮点的armv5te,或GPU)供电的800x480液晶显示器。

我遇到的问题是它的速度很慢。在20 CPU绘制的单个量规(背景PNG图像和旋转PNG拨号图像)使用的CPU时间约为20%。添加一个呈现的文本字符串会增加CPU使用率高达40%。

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

对我来说,除了QGraphicsScene,还有其他的选择吗?

这就是我目前正在做的事情:

代码语言:javascript
复制
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));
}

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-14 18:35:44

最后我搬到了4号快板。

它更适合这项任务。更轻,而且支持定点数学。

票数 0
EN

Stack Overflow用户

发布于 2014-04-24 04:53:54

我建议使用QML而不是QGraphicsView。您可以创建自定义量规与引人注目的动画与良好的性能。你也可以有弹簧和阻尼的效果。你可以看看拨号控制实例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23260043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档