在Qt GUI App Windows中嵌入Python问题

时间:2015-12-11 21:53:12

标签: python c++ windows qt

目前,我正在使用Qt框架开发C ++ GUI应用程序。通常,此应用程序由用户鼠标/键盘输入驱动。但是,我们最近使用PyQt构建了一个python接口,因此用户可以使用简单的python脚本来驱动应用程序。这意味着我们必须在C ++应用程序中嵌入python解释器。为了初始化解释器,我们只需在设置主窗口然后调用Py_Finalize()之后在main.cpp函数中调用Py_Initialize();在程序退出之前。这似乎在Mac和Linux平台上都没有问题,但我似乎遇到了Windows上的问题。

在调用Py_Initialize()之后,用户可以打开文件浏览器来选择感兴趣的文件以读入程序。在代码中,我们使用QFileDialog :: getOpenFileName静态方法来允许用户选择他们的文件。但是,在Windows上,该程序正在崩溃。该程序看起来在python库中对PyDict_GetItem的调用时崩溃。

我创建了一个超级简单的Qt GUI程序,它也会出现同样的崩溃。本质上,该程序是一个基本的Qt GUI应用程序,在主窗口中间有一个按钮。按下按钮时,应出现文件对话框,但程序崩溃。代码的主要部分如下。

的main.cpp

#include "Python.h"
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    Py_Initialize();
    int result = a.exec();
    Py_Finalize();
    return result;
}

mainwindow.h

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
     QString defaultFileName = QString::fromStdString("file.txt");
     QString getFileName = QFileDialog::getOpenFileName(this, "Load File", defaultFileName, "Files (*.txt *.csv)");
}

请注意,在按下程序中的唯一按钮后调用QFileDialog :: getOpenFileName时,程序会崩溃。

以下是一些可用于诊断问题的其他规范:

  • Qt Framework版本:Qt 5.4.0
  • Python版本:2.7.10
  • 使用Desktop Qt 5.4.0 MSVC2013构建OpenGL 64位套件

0 个答案:

没有答案