通过Boost Python模块运行C++ QT应用程序
是否可以通过python将QtGUI应用程序作为boost模块运行?它是一个标准的C++可执行文件,但现在我把它编译成一个共享库,并试图从Python启动它。现在,每次我从python解释器运行simpleMain时,它都会进入python解释器。如中所示,我每次都会收到一个新的Python 2.7.1+r271:86832,2011年4月11日,18:05:24问候语,当我关闭解释器时,我的程序会出现故障。另外,我不能直接调用main函数,因为我不知道如何将python列表转换为char*。char的字符串似乎很自然 这是我启动它的python代码:通过Boost Python模块运行C++ QT应用程序,c++,python,qt,extend,boost-python,C++,Python,Qt,Extend,Boost Python,是否可以通过python将QtGUI应用程序作为boost模块运行?它是一个标准的C++可执行文件,但现在我把它编译成一个共享库,并试图从Python启动它。现在,每次我从python解释器运行simpleMain时,它都会进入python解释器。如中所示,我每次都会收到一个新的Python 2.7.1+r271:86832,2011年4月11日,18:05:24问候语,当我关闭解释器时,我的程序会出现故障。另外,我不能直接调用main函数,因为我不知道如何将python列表转换为char*。c
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++模块中的代码,这些代码可以打开/关闭/…窗户。我有这样的代码
< P> >我认为在C++中调用主体是非法的,这可能是Sebug的原因。
HMM通常主要被称为
argc == 1
即使没有参数,argc[0]仍然是可执行文件名
此外,argv应该是指向以空指针终止的字符串的指针列表,而您什么也不传递。根据QApplication解析参数列表的方式,它可能会根据argc循环,也可能只是查找空指针,如果传递的argc为零,它也可能崩溃。
试一试
或
打电话给main是违法的吗?这只是另一个函数,按惯例命名为main。但是我不知道C++的标准,所以我可能错了。Trp:有一个关于这个的,还有几个其他的。链接是由实现定义的。不过,我不认为编译器编写人员会费心用一种特殊的方式来处理它。在这种情况下,他可以将main移动到一个名为init的东西中,直接从boost调用它,或者从main调用它。他还可以在编译为模块时显示main。
char *args[1] = { NULL }; main(0, args);
char *args[2] = { "Dummy name", NULL }; main(1, args);