Я хотел бы создать интерфейс Qt, похожий на приборную панель автомобиля (датчики, циферблаты, ручки и т. Д.). Мое устройство оснащено ЖК-дисплеем с разрешением 800x480, работающим на SoC imx287 ARM (armv5te без аппаратного плавающего режима или графического процессора).
У меня проблема в том, что он очень медленный. Один датчик (фоновое изображение в формате PNG с вращающимся изображением циферблата в формате PNG), отрисовываемый со скоростью 20 кадров в секунду, потребляет ~ 20% процессорного времени. Добавление одной отображаемой текстовой строки увеличивает использование ЦП до 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));
}
Заранее спасибо!
.bpp
и.pcr
. Замените.bpp = 32
и.pcr = 0xF0D00080|END_SEL
на.bpp = 16
и.pcr = 0xF0D00080
(хорошо для iMx25, использующего платформенное устройство). Т.е. драйвер это поддерживает, нужно просто отправить какие-то конфигурационные данные. Возможно, вам придется взглянуть на таблицу данных iMx28 для значения.pcr
. - person artless noise   schedule 29.04.2014