嵌入式QT5.12.3:QWidget :: paintEngine:不再调用“

现在,我正在尝试使嵌入式QT GUIAmbarella 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

jayredie 回答:嵌入式QT5.12.3:QWidget :: paintEngine:不再调用“

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3060434.html

大家都在问