现在,我正在尝试使嵌入式QT GUI
在Ambarella CV25
板上运行。我已经到处交叉编译QT 5.12.3
并编译了一个简单的qt
示例。交叉编译器为Ambarella CV25 linaro-aarch64-2018.08-gcc8.2/bin/aarch64-linux-gnu-xxx
。
当我将qt
库和示例下载到板上时,遇到以下问题:
./my_second_example -platform linuxfb
QIconvCodec::convertToUnicode: using Latin-1 for conversion,iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion,iconv_open failed
QStandardPaths: XDG_RUNTIME_DIR not set,defaulting to '/tmp/runtime-root'
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0,type: 1
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::drawRects: Painter not active
debug paintEvent(): QPaintDevice 0x7fe05f0d78
debug paintEvent(): painter.isactive false
debug paintEvent(): QPaintEngine 0x0
.....
有人可以描述如何解决此问题吗?我在网上搜索,但是发现的所有帖子都没有答案,或者建议在paintEvent
函数下进行绘画。
我的代码:
* PaintTest.h
:
#ifndef PAINTTEST_H
#define PAINTTEST_H
#include <QWidget>
#include <QLabel>
#include <QPainter>
class PaintTest : public QWidget
{
Q_OBJECT
public:
explicit PaintTest(QWidget *parent = nullptr);
void paintEvent(QPaintEvent *);
};
#endif // PAINTTEST_H
-
PaintTest.cpp
#include "PaintTest.h"
#include <QLabel>
#include <QEvent>
#include <QDebug>
PaintTest::PaintTest(QWidget *parent) :
QWidget(parent)
{
}
void PaintTest::paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.begin(this);
painter.setPen(Qt::gray);
painter.setBrush(Qt::green);
painter.drawRect(10,20,50,50);
//painter.drawText(rect(),Qt::AlignCenter,tr("Draganddropfile(s)here"));
qDebug()<<"debug paintEvent(): QPaintDevice " << painter.device();
qDebug()<<"debug paintEvent(): painter.isactive " << painter.isactive();
qDebug()<<"debug paintEvent(): QPaintEngine " << painter.paintEngine();
painter.end();
}
-
main.cpp
#include <QApplication>
#include "PaintTest.h"
int main(int argc,char* argv[])
{
QApplication a(argc,argv);
PaintTest pt;
pt.show();
return a.exec();
}
当我在各处交叉编译qt
时,我还将提供嵌入式qt
配置参数:
../qt-everywhere-src-5.12.3/configure -v -prefix /home/andy/Amb/cv2x_linux_sdk_2.5/workspace/build_qt/output -release -opensource -confirm-license -no-accessibility -make libs -xplatform linux-aarch64-gnu-g++ -optimized-qmake -pch -qt-zlib -no-opengl -no-sse2 -no-openssl -no-cups -no-glib -no-pkg-config -no-separate-debug-info -tslib -I/home/andy/Amb/cv2x_linux_sdk_2.5/ambarella/prebuild/third-party/armv8-a/tslib/include -L/home/andy/Amb/cv2x_linux_sdk_2.5/ambarella/prebuild/third-party/armv8-a/tslib/usr/lib -skip qtdeclarative
CV25
平台不支持opengl
,因此我禁用了eglfs
,使用linuxfb
。