标签: qprocess

如何在Qt程序中嵌入二进制可执行文件(在运行时执行)?

我正在使用Qt编写一个跨平台的C++程序,我想在程序中打包/嵌入一些二进制可执行文件.该程序应该能够在运行时执行这些二进制文件.

我想,我需要使用start()和":/ ..."表示法的QResource和QProcess,但我似乎没有让进程运行.有什么我想念的吗?它应该像这样工作吗?二进制文件是否需要设置为可执行文件?

背景:我正在编写一个使用Git的工具,我不想让最终用户手动安装Git.

(在Mac OS X上尝试这个,BTW.)

更新:

我使用以下代码(C++,Mac OS X上的Qt):

QString program = ":/git";
QStringList arguments;
arguments << "help" << "commit";
myProcess->start(program, arguments);
Run Code Online (Sandbox Code Playgroud)

Git可执行文件位于项目路径中,我的resources.qrc引用它,如下所示:

<qresource prefix="/">
    <file>git</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)

我没有收到错误,但程序没有执行.当我设置program为不存在的文件时,行为是相同的.":/git"用绝对路径替换git非常有效.

qt qprocess

7
推荐指数
2
解决办法
2349
查看次数

使用包含空格的参数调用Qprocess - Windows

我试图调用一个可执行文件qprocess并传递一些可能(并且很可能会)包含空格(不是全部)的参数.可执行文件是python已打包的脚本Py2exe.该python脚本用于optparse解析参数.

如果我py2exe.execmd.exe通话中打电话是这样的:

pythonExecutable.exe -aarg_a -barg_b -c"path with spaces" -darg_d
Run Code Online (Sandbox Code Playgroud)

像这样的电话会成功.

我希望通过一个Qt应用程序使用Qprocess,但我找不到一种方法来做这个,因为Qprocess将删除任何引号("")在空格出现的地方留下参数.

我似乎错过了什么,有人可以帮助解决这个问题吗?

windows qt qprocess

7
推荐指数
1
解决办法
6479
查看次数

在Android平台上通过QProcess运行shell命令

我无法在Android平台上通过QProcess运行任何命令.我正在使用Qt库.任何人都可以解释如何从Android平台上的应用程序运行shell命令?

    QProcess process();

    process.execute("ls");

   bool finished = process.waitForFinished(-1);

   qDebug() <<  "End : " << finished << " Output : " << process.errorString();
Run Code Online (Sandbox Code Playgroud)

如果我没有指定超时,则该过程不会完成.当我指定超时时,process.waitForFinished()返回false,比如10000毫秒.

qt android qprocess

7
推荐指数
1
解决办法
1042
查看次数

如果我使用startDetached启动QProcess,是否会获得完成的插槽

如果我使用startDetached()启动QProcess,是否会获得完成的信号?我正在尝试启动一个进程,但是我需要能够在进程终止时获得一个事件.

c++ qt qprocess

6
推荐指数
1
解决办法
3011
查看次数

如何将QProcess的输出定向到文件?

我希望将输出qconf重定向到test_settings.txt我的tmp文件夹中.我想到了两种可能性:

QProcess procWriteProject;

procWriteProject.start("qconf", QStringList() << " -sprj "
    << projectList[0] << " >> " << "\"/tmp/testing.txt\"");

procWriteProject.start("qconf -sprj " + projectList[0] + " >> "
    + "/tmp/test_settings");
Run Code Online (Sandbox Code Playgroud)

其中任何一个都有效吗?有没有更好的办法?

qt qprocess

6
推荐指数
1
解决办法
4296
查看次数

Qt调用外部Python脚本

我正在尝试为我用Python编写的命令行工具编写一个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);
}
Run Code Online (Sandbox Code Playgroud)

下面是我的项目的头文件:

#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 …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt4 qprocess

6
推荐指数
1
解决办法
1万
查看次数

问:如何通过系统调用捕获错误?

我正在构建一个GUI应用程序,我在其中进行系统调用并调用gnuplot来运行脚本.现在我想构建一个错误消息,说明什么时候出错(例如没有安装gnuplot或者路径错误).

所以我一直在考虑推出一个QMessageBox,但我不知道如何检查系统调用是否成功.

if(//System call didn't work)
{
    QMessageBox msgBox;
    msgBox.setWindowTitle("Error");
    msgBox.setIcon(QMessageBox::Critical);
    msgBox.setText("GNUPLOT was not installed");
    msgBox.exec();
}
Run Code Online (Sandbox Code Playgroud)

我的系统调用如下所示:

system(gnuplot script.txt);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c++ qt qprocess qiodevice qtcore

6
推荐指数
1
解决办法
1098
查看次数

Qt - 等待Qprocess完成

我正在使用CMD,QProcess但我遇到了问题.

我的代码:

QProcess process;
process.start("cmd.exe");
process.write ("del f:\\b.txt\n\r");
process.waitForFinished();
process.close();
Run Code Online (Sandbox Code Playgroud)

当我没有通过争论时,waitForFinished()等待30秒.我想QProcess在执行CMD命令后终止!不多也不少!

qt command-prompt qprocess

6
推荐指数
2
解决办法
9718
查看次数

如何在PySide中获取由QProcess运行的命令的输出?

我想知道如何捕获PySide中QProcess运行的命令的输出,以便可以显示它.

python qt qprocess pyside python-3.x

5
推荐指数
1
解决办法
1850
查看次数

QProcess 和命令行“/c”参数

我对 QProcess 有一个非常奇怪的问题,它的行为很奇怪。

我最后想要得到的是这样的东西(这是Windows 7中的cmd.exe)

C:\path_to_somewhere>cmd /c "C:\Program Files\path_to_dir\executable"
Run Code Online (Sandbox Code Playgroud)

(cmd是为了兼容QProcess的显示)

所以为了做类似的事情,我创建了这个:

QProcess proc;
QString command;
QStringList attributes;

command = "c:\\windows\\system32\\cmd.exe";
QStringList << QString("/c \"C:\\Program Files\\path_to-dir\\executable"");
proc.start(command, attributes);
Run Code Online (Sandbox Code Playgroud)

我得到的错误输出是:

Name '\"c:\Program Files\Quantum GIS Wroclaw\bin\gdalwarp.exe\"' is not recognized as
internat or external command, executable or batch file.
Run Code Online (Sandbox Code Playgroud)

(它是我从波兰语翻译过来的,所以英语可能有点不同)。

似乎 \ 字符在字符串中没有转义,而将 \" 保留为命令中的字符。我做错了什么?

我已经尝试过

proces.start(QString) 
Run Code Online (Sandbox Code Playgroud)

函数与三重“\”\”,它也不起作用。我想这个问题的解决方案必须非常简单,我什至都没有想到它。

qstring escaping qprocess

5
推荐指数
1
解决办法
6004
查看次数