Запуск приложения C ++ Qt через модуль надстройки Python - PullRequest
0 голосов
/ 10 августа 2011

Можно ли запустить приложение Qt GUI в качестве модуля надстройки через Python?Он работал как стандартный исполняемый файл C ++, но теперь я собираю его в общую библиотеку и пытаюсь запустить его из python.Прямо сейчас он просто входит в интерпретатор python каждый раз, когда я запускаю simpleMain () из интерпретатора.Например, я получаю новые приветствия «Python 2.7.1+ (r271: 86832, 11 апреля 2011, 18:05:24)» каждый раз, и моя программа вызывает ошибки при закрытии интерпретатора.Кроме того, я не могу вызвать основную функцию напрямую, потому что я не уверен, как преобразовать список Python в символ *.Строка в char , кажется, работает естественно.

Это мой код Python для его запуска:

import libsunshine

libsunshine.simpleMain()

, а вот мой код C ++:

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(libsunshine)
{
    def("say_hello", say_hello);
    def("simpleMain", simpleMain);
    def("main", main);
}

int simpleMain()
{
   char* args[] = {};
   main(0,args);
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Sunshine w;
    w.show();
    return a.exec();
}

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Хм, обычно главный вызывается с

argc == 1

, даже если нет параметров, argc[0] - имя исполняемого файла.

Также ожидается, что argv будет списком указателей на строки, оканчивающиеся нулевым указателем, в то время как вы ничего не передаете. В зависимости от того, как QApplication анализирует список аргументов (он может зацикливаться в зависимости от argc или может просто искать нулевой указатель), он может аварийно завершить работу, если ему будет передано даже нулевое argc.
Попробуйте

char *args[1] = { NULL }; main(0, args);

или

char *args[2] = { "Dummy name", NULL }; main(1, args);
0 голосов
/ 12 августа 2011

Вы можете написать настройку приложения в PyQt, которая так же проста, как

import sys
from PyQt4 import QtGui    
QtGui.QApplication(sys.argv)

в начале вашего скрипта.Затем можете вызвать код C ++ в ваших модулях, которые могут открывать / закрывать / ... окна.(У меня есть код, который работает таким образом)

Я думаю, что вызывать main в c ++ незаконно, что может быть причиной segfault.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...