通过Boost Python模块运行C++ Qt应用程序
有没有办法通过Python把一个Qt图形界面应用程序当作Boost模块来运行?之前这个程序可以作为标准的C++可执行文件运行,但现在我把它编译成了一个共享库,想从Python中启动它。现在每次我从解释器中运行simpleMain()时,它都会进入Python解释器。也就是说,每次我都会看到新的“Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)”的欢迎信息,而且当我关闭解释器时,我的程序会崩溃。此外,我不能直接调用主函数,因为我不太确定如何把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();
}
2 个回答
0
嗯,通常情况下,main函数是这样调用的:
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
你可以用PyQt来写你的应用程序设置,这个过程非常简单,就像下面这样:
import sys
from PyQt4 import QtGui
QtGui.QApplication(sys.argv)
在你脚本的开头部分。然后你可以在你的模块中调用C++代码,这样就可以打开、关闭窗口等等。(我有代码是这样工作的)
我觉得在C++中调用main函数是不合法的,这可能是导致程序崩溃的原因。