Что я пытаюсь сделать - Сделать JNI-вызов в общую библиотеку, написанную на Qt. На стороне 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, он работает нормально.
Я не создал экземпляр QApplication в моей общей библиотеке в отличие от отдельного приложения Qt.
Поэтому я решил создать один таким образом -
Из основного потока Java - порождает другой поток, который выполняет вызов JNI для создания приложения QApplication. Запускает exec ().
Из основного потока Java продолжайте делать другие вызовы JNI после инициализации QApplication.
Это все еще не работает. Любой совет о том, что я могу делать неправильно и как правильно делать то, что я пытаюсь сделать?
Я искал решения на форуме и в Интернете, но ничего не помогло. Единственный поток, который приблизился к тому, что мне нужно, - http://developer.qt.nokia.com/forums/viewthread/2283 [developer.qt.nokia.com].
Все это работает внутри веб-контейнера на основе Java.