Страница 1 из 2

Встраивание окна Axioma в своё приложение.

Добавлено: 07 июн 2019, 10:51
grig27
Добрый день.

Пробую встраивать возможности Axioma в своё приложение. Наткнулся на проблему инициализации приложения.
На этапе выполнения axioma.app.AxiomaApplication(sys.argv) возникает ошибка "could not find or load the Qt platform plugin windows".

Устанавливаю переменные окружения - QT_PLUGIN_PATH и QT_QPA_PLATFORM_PLUGIN_PATH. Ничего не меняется.
Решается или копирование qt.conf в папку со своим приложением и прописываением в файле пути до QTPlugin. Или копирование папки platforms в папку с приложением.
Оба пути не подходят как решение... подскажите, может у Вас есть решение этой проблемы?

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 07 июн 2019, 14:05
Smeltzov
А на чём приложение? На Qt/без? на питоне с Qt/без?
У вас свой интерпретатор Python или пользуетесь тем, что в Аксиоме? если свой - то какой версии
Пришлите минимальный пример, на котором проявляется ошибка.

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 07 июн 2019, 14:17
grig27
Пишем на Delphi. Используем Python Embed.
https://docs.python.org/3.7/extending/e ... on%20embed
Подготовлю пример.

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 10 июн 2019, 06:29
grig27
Добрый день.

Выложил по ссылке
https://yadi.sk/d/BUc4Etz_ehpoMg

Если убрать файл qt.conf, приложение не видит плагины.

Нижнее поле - лог выполнения.
PyDo - выполняемые команды, PIO - вывод питона. Env - установка окружения.

Верхняя кнопка, запуск Axioma.

Ниже - кнопка выполнения блока команд.

Ещё ниже, выполнение отдельной команды.

Как мы делаем в QGIS. Открываем окно карты QgsMapCanvas, и меняем Parent виндовой функцией SetParent.

Примерный код представлен ниже. map_hwnd ID окна который уже вставляем в своё окно.

К стати. Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
Безымянный_1.png
Безымянный_1.png (29.76 КБ) 15319 просмотров

Код: Выделить всё

# -*- coding: utf-8 -*-
import sys
from qgis.core import *
from qgis.gui import *
import gdal
import ogr
# create main window
canvas = QgsMapCanvas()
	
canvas.setCanvasColor(Qt.white)
canvas.enableAntiAliasing(True)
#canvas.useImageToRender(False)
#layer = QgsVectorLayer("d://85_region.shp", "a1", "ogr")	
layer = QgsVectorLayer("D://TempUser//42_wgs//85_region.shp", "a1", "ogr")
#layer = QgsVectorLayer("D://TempUser//UNG//KPT//Участки.tab", "Участки", "ogr")
#file = QFileDialog.getOpenFileName(self,"Open", ".", "Shp(*.shp)")
#layer = QgsVectorLayer(file, "My Shape", "ogr")
	
if not layer.isValid():
	print("Layer failed to load!")
else:
	print("valid!")

QgsProject.instance().addMapLayer(layer);
canvas.setExtent(layer.extent())
# set the map canvas layer set
canvas.setLayers([layer])
canvas.setWindowFlags(Qt.SubWindow)
#| Qt.FramelessWindowHint
canvas.show()
extent = layer.extent()
canvas.setExtent(extent)
map_hwnd = int(canvas.effectiveWinId())

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 10 июн 2019, 09:47
grig27
Пытаюсь создать и показать окно карты.

Код: Выделить всё

# -*- coding: utf-8 -*-
import sys
import axioma.app
from PyQt5.QtCore import QRectF, QPointF
import gdal
import ogr
map = axioma.render.Map()
#print(map.effectiveWinId())
mapView = axioma.gui.MapView(map)
mapView.show()
print(mapView.effectiveWinId())
map_hwnd = mapView.effectiveWinId()
Ошибка в coordsys.dll.

Как открыть окно карты, пока примера не нашёл...

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 11 июн 2019, 15:16
Smeltzov
Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
При использовании бесплатной версии Аксиомы обязательно поднимать главное окно программы. Оно должно быть видимым. Такие условия.
Ошибка в coordsys.dll
Аксиома не смогла показать Окно Карты MapView без КС. Добавьте слои c КС в Карту Map.
Хорошая ошибка, спасибо. Мы проработаем этот момент, чтобы такого не происходило.
qt.conf
Попробуйте добавить путь к Qt плагинам через статический метод QCoreApplication::addLibraryPath
до создания QApplication
https://doc.qt.io/qt-5/qcoreapplication ... ibraryPath
https://doc.qt.io/qt-5/deployment-plugi ... -directory

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 13 июн 2019, 06:02
grig27
Статический метод сработал! Это уже хорошо.

Странно, но по идее это приравнивается к QT_QPA_PLATFORM_PLUGIN_PATH. Загадочный этот Qt... От версии к версии всё по разному.

Мы пробуем в новый Кадофис встроить возможности Аксиомы.
У Вас есть ещё RunTime версия Аксиомы.

Как нам поступать в дальнейшем... Какой режим более оптимален?

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 13 июн 2019, 09:31
Александр
Для использования Аксиомы без главного окна программы:
  • разработчикам требуется приобрести платную лицензию Аксиомы.
  • для распространения и активации программы требуются лицензии рантайм.
Конкретные предложения отправлю Вам на почту.

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 13 июн 2019, 09:58
grig27
Напишите на ...
Отредактировано модератором: убрал почту

Re: Встраивание окна Axioma в своё приложение.

Добавлено: 18 июн 2019, 08:26
grig27
Создал главное окно, встроил в своё окно. Всё вроде бы отображается, но всё равно падает через некоторое время. Без встраивания, всё работает нормально(вроде бы:-)).