我想创建一个汽车仪表板类Qt接口(量规,拨号,旋钮等)。我的设备有一个由imx287 ARM SoC (没有硬件浮点的armv5te,或GPU)供电的800x480液晶显示器。
我遇到的问题是它的速度很慢。在20 CPU绘制的单个量规(背景PNG图像和旋转PNG拨号图像)使用的CPU时间约为20%。添加一个呈现的文本字符串会增加CPU使用率高达40%。
我用的是QGraphicsScene,我用了很多浮点计算器.这是一个问题,因为我的SoC没有硬件浮动能力。
对我来说,除了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));
}提前感谢!
发布于 2014-07-14 18:35:44
最后我搬到了4号快板。
它更适合这项任务。更轻,而且支持定点数学。
发布于 2014-04-24 04:53:54
我建议使用QML而不是QGraphicsView。您可以创建自定义量规与引人注目的动画与良好的性能。你也可以有弹簧和阻尼的效果。你可以看看拨号控制实例。
https://stackoverflow.com/questions/23260043
复制相似问题