通过boost python模块运行c++ Qt应用程序

Running a C++ Qt application through a boost python module

本文关键字:c++ Qt 应用程序 运行 模块 boost python 通过      更新时间:2023-10-16

是否可以通过python运行Qt gui应用程序作为boost模块?它是一个标准的c++可执行文件,但现在我把它编译成一个共享库,并试图从python启动它。现在它只是在每次从解释器运行simpleMain()时进入python解释器。就像这样,每次我都会得到一个新的"Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)"的问候,当我关闭解释器时,我的程序会出现分段错误。此外,我不能直接调用main函数,因为我不确定如何将python列表转换为char*。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();
}

您可以在PyQt中编写应用程序设置,就像

一样简单
import sys
from PyQt4 import QtGui    
QtGui.QApplication(sys.argv)
脚本开头的

。然后可以在你的模块中调用c++代码,可以打开/关闭/…窗户(我有这样工作的代码)

我认为在c++中调用main是非法的,这可能是导致段错误的原因。

通常用

来调用main
argc == 1

即使没有参数,argc[0]为可执行文件名。

另外,argv预计是一个指向以空指针结束的字符串的指针列表,而您没有传递任何内容。根据QApplication解析参数列表的方式(它可能会根据argc循环,或者它可能只是寻找一个空指针),如果传递一个为0的argc,它可能会崩溃。
试着

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

char *args[2] = { "Dummy name", NULL }; main(1, args);