【发布时间】:2010-12-20 05:53:15
【问题描述】:
我想做的事 – 对用 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
}
有什么问题 – 如图所示,调用渲染时代码崩溃。而且它只对某些 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 容器中运行。
【问题讨论】:
-
你不能将Qt代码作为外部命令行工具运行吗?将 svg 作为参数并返回图像?
-
您是否尝试过创建一个不创建 QApplication 的简单独立 Qt 应用程序?如果您在不使用 Java 的情况下让它崩溃,那就太好了。下一步是在调试器中捕获此崩溃并查看那里发生了什么。
标签: qt crash svg java-native-interface