繁体   English   中英

QPainter JNI调用使应用程序崩溃

[英]QPainter JNI call crashes the application

我正在尝试做的事 –对用Qt编写的共享库进行JNI调用。 在C ++方面,我正在使用QPainter和QSvgRender来处理svg图像并返回一个简单的QImage。

QImage im;
QPainter painter;
if("image/svg+xml" == mimeType) {
    QSvgRenderer svgrenderer(ar);
    im = QImage(static_cast<int> (svgrenderer.defaultSize().width()),
                static_cast<int> (svgrenderer.defaultSize().height()),
                    QImage::Format_ARGB32);
    im = im.scaled(QSize(50,50), Qt::KeepAspectRatio);
    im.fill(0);
    painter.begin(&im);
    svgrenderer.render(&painter); //Crashes here
}

问题是什么 -如图所示,调用render时代码崩溃。 而且它仅对某些SVG图像崩溃。

如果我在独立的Qt应用程序中运行代码,则可以正常工作。 与独立的Qt App相比,我没有在共享库中创建QApplication实例。 因此,我决定以这种方式创建一个-

来自Java主线程–产生另一个线程,该线程进行JNI调用以创建QApplication。 运行exec()。

在QApplication初始化之后,从Java主线程继续进行其他JNI调用。

这仍然行不通。 关于我可能做错了什么以及做我尝试做的正确方法的任何建议? 我已经在论坛和网络上搜索了解决方案,但没有任何帮助。 唯一符合我需要的线程是– http://developer.qt.nokia.com/forums/viewthread/2283 [developer.qt.nokia.com]。

整个过程在基于Java的Web容器中运行。

有点解决了崩溃的问题。 似乎是我正在使用http://bugs.sun.com/view_bug.do?bug_id=5102720的 Java 1.5中的错误

我现在通过更改qt来解决此问题,方法是通过为qmake-添加这些标志来弥补堆栈重新对齐问题。

QMAKE_CFLAGS += "-mstackrealign"
QMAKE_CXXFLAGS += "-mstackrealign"

问题主要在Windows上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM