我有一个C++/Qt应用程序,它的GUI可以扩展模块.扩展应该简单而通用.我只是检查一个概念 - 是否可以使用这个主要的C++/Qt应用程序来执行Python/PySide/PyQt脚本,该脚本将创建一个QWidget(或派生类)实例并将此小部件嵌入到主C++/Qt应用程序中?
是否有任何工作片段来证明此任务的可行性?即如何创建和嵌入小部件?如何在应用程序和窗口小部件之间传递信号?
小智 6
这个问题有点老了,但如果其他人也面临同样的问题,我会尝试给出一个有用的答案。
我认为这是可能的。在下面的示例中,我在 C++ 中创建了一个 QApplication 和 QMainWindow,嵌入了一个 python 解释器,然后在 python 端,我创建了一个添加到主窗口的 QPushButton。
试试这个:
#include <QApplication>
#include <QMainWindow>
#include <iostream>
#include "Python.h"
class PythonQt
{
public:
PythonQt()
{
char name[] = "test";
Py_SetProgramName(name);
Py_Initialize();
std::string code =
"from PySide import QtGui\n"
""
"all_widgets = QtGui.QApplication.instance().allWidgets()\n"
"window = None\n"
"for widget in all_widgets:\n"
" if str(widget.objectName()) == \"main_window\":\n"
" window = widget\n"
" break\n"
""
"def message_box():\n"
" QtGui.QMessageBox.information(None, 'Test', 'Hello!', \
QtGui.QMessageBox.Ok)\n"
" QtGui.QApplication.instance().quit()\n"
""
"button = QtGui.QPushButton('Press Me')\n"
"button.clicked.connect(message_box)\n"
"window.setCentralWidget(button)\n"
"window.move(600, 300)\n"
"window.show()";
PyRun_SimpleString(code.c_str());
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow win;
win.setObjectName("main_window");
PythonQt python_code;
a.exec();
}
Run Code Online (Sandbox Code Playgroud)
python 脚本在这里写成一个字符串,将所有内容都放在一个文件中,但您当然可以从 .py 文件中读取它。
不过,对象所有权可能是一个问题,如 Trilarion 提供的链接所示。
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |