Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Boost Python模块运行C++ QT应用程序_C++_Python_Qt_Extend_Boost Python - Fatal编程技术网

通过Boost Python模块运行C++ QT应用程序

通过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

是否可以通过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代码:

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);