У меня есть приложение C ++ / Qt, которое использует проект PySide. Я успешно создал оболочку для библиотеки, а также связал пользовательский объект со средой Python, доступ к которой осуществляется из кода Python. То, что я хочу сделать сейчас, похоже, что это должно быть намного проще:
Я хочу получить доступ и управлять экземпляром объекта Qt (в данном случае QVariantList) из кода Python. Скажем, у меня есть неупорядоченный список и некоторый код Python, который будет сортировать этот список. Для выполнения я использую функцию runScript
, практически не изменившуюся из примера приложения Scriptable . Мой код выглядит примерно так:
void testInterface() {
QVariantList testList = { 1, 3, 2, 5, 4 };
QString script = "print(\"Hello World\")";
QVERIFY(::PythonUtils::runScript(script.split("\n")));
QVERIFY(testList.isSorted()) // pseudo-code
}
Python работает нормально, но я не знаю, как получить доступ к списку из скрипта.
Я считаю, что одна возможностьчтобы создать собственный класс, который серверы в качестве поставщика контекста, поэтому я мог бы сделать что-то вроде этого:
// C++
ContextManager contextManager;
PythonUtils::bindAppObject("__main__", "contextManager", PythonUtils::ContextManagerType, contextManager)
contextManager.register("myList", &testList);
//Python
myList = contextManager.get("myList")
sort(myList)
contextManager.set("myList", myList)
Но мне кажется, что должен быть более легкий путь. Буду рад любой подсказке, которую вы можете дать.