通过boost python模块运行c++ Qt应用程序
Running a C++ Qt application through a boost python module
是否可以通过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是非法的,这可能是导致段错误的原因。
通常用
来调用mainargc == 1
即使没有参数,argc[0]
为可执行文件名。
另外,argv
预计是一个指向以空指针结束的字符串的指针列表,而您没有传递任何内容。根据QApplication解析参数列表的方式(它可能会根据argc循环,或者它可能只是寻找一个空指针),如果传递一个为0的argc,它可能会崩溃。
试着
char *args[1] = { NULL }; main(0, args);
或
char *args[2] = { "Dummy name", NULL }; main(1, args);
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Qt Quick-如何仅从c++代码与qml属性交互
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 如何在Qt中取消捕获字符串
- Qt SQLite没有查询或参数计数不匹配
- Qt SQlite无法创建表