Как я могу создать свойства контекста, похожие на QML, с помощью PySide? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть приложение 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)

Но мне кажется, что должен быть более легкий путь. Буду рад любой подсказке, которую вы можете дать.

...