7

Python で記述されたコマンド ライン ツールの 1 つの GUI ラッパーを記述しようとしています。
Qtを使うべきだと提案されました。

以下は私のプロジェクトの .cpp ファイルです:

#include "v_1.h"
#include "ui_v_1.h"
#include<QtCore/QFile>
#include<QtCore/QTextStream>
#include <QProcess>
#include <QPushButton>
v_1::v_1(QWidget *parent) :
    QMainWindow(parent),ui(new Ui::v_1)
    {
        ui->setupUi(this);
    }
    v_1::~v_1()
    {
        delete ui;
    }

void v_1::on_pushButton_clicked()
{
    QProcess p;
    p.start("python script -arg1 arg1");
    p.waitForFinished(-1);
    QString p_stdout = p.readAllStandardOutput();
    ui->lineEdit->setText(p_stdout);
}

以下は私のプロジェクトのヘッダーファイルです:

#ifndef V_1_H
#define V_1_H
#include <QMainWindow>
namespace Ui {
class v_1;
}

class v_1 : public QMainWindow
{
    Q_OBJECT   
public:
    explicit v_1(QWidget *parent = 0);
    ~v_1();

private slots:
    void on_pushButton_clicked();
private:
    Ui::v_1 *ui;
};

#endif // V_1_H

UI ファイルは、単なるプッシュ ボタンと LineEdit ウィジェットです。

プッシュ ボタンをクリックするとスロットが割り当てられます。または などon_pushButton_clicked()のユーティリティを呼び出すと、メソッドは正常に機能し、これらのコマンドの出力を LineEdit ウィジェットにパイプしますが、Python スクリプトを呼び出しようとすると、LineEdit ウィジェットに何も表示されません。lsps

どんな助けでも大歓迎です。

4

3 に答える 3

1

次のことを試しましたか。

  1. Pythonがシステムパスにあることを確認してください
  2. ドキュメントに記載されているようにパラメーターを QStringList として渡します
  3. テスト中に readAllStandardOutput を readAll に変更します

void v_1::on_pushButton_clicked() 
{
    QProcess p;
    QStringList params;

    params << "script.py -arg1 arg1";
    p.start("python", params);
    p.waitForFinished(-1);
    QString p_stdout = p.readAll();
    ui->lineEdit->setText(p_stdout);
}
于 2013-09-21T12:02:52.347 に答える