标签: qprocess

如何在新线程(QThread)中使用进程(QProcess)?

我有以下代码:

 void Processmethod()
{

    QDialog *ProcessMessage = new QDialog;      
    Ui::DialogProcessMessage Dialog;            
    Dialog.setupUi(ProcessMessage);             
    ProcessMessage->setModal(true);
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show();

    qApp->processEvents();

    processmethodONE();  
    processmethodTWO();
    processmethodTHREE();                  
}

void processmethodONE()
{
    QString ProcessCommand = "w8 " + blablubli";            

    Prozess.setWorkingDirectory(Path);         //QProcess "Prozess" is globaly defined  
    Prozess.setStandardOutputFile(Path);       //in my class

    QThread* thread = new QThread;
    Prozess.moveToThread(thread);
    Prozess.start(ProcessCommand);


while(!Prozess.waitForFinished(2000))
   {
       std::cerr << "Process running " << std::endl;
   }

QProcess::ExitStatus Status = Prozess.exitStatus(); 

if (Status == 0)
 {
   std::cout << "File created!" << std::endl;
 }
}
Run Code Online (Sandbox Code Playgroud)

在此源代码中,我尝试在某些进程启动之前打开一个弹出对话框。问题是对话框不可点击,但在对话框上我想创建一个按钮来中止正在运行的方法。如您所见,我尝试使用 QThread 在另一个线程中运行进程,但仍然无法单击该对话框。此外,如果我使用“application/x-executable”文件打开我的应用程序(GUI),则在激活上述方法时会丢失对话框内容。我该如何解决这些问题?我哪里错了?你好

c++ qt qprocess qdialog qthread

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

Qt:无法使用QProcess启动Windows控制台

QProcess不会显示黑色控制台窗口.

这是我使用的代码:

QProcess*p=new QProcess(this);
p->start("cmd.exe");
Run Code Online (Sandbox Code Playgroud)

用calc.exe替换cmd.exe成功启动计算器.

c++ qt qprocess

4
推荐指数
1
解决办法
3283
查看次数

QProcess从stdin和stdout开始

我需要从QProcess运行以下语句:

programm < file1 > file2
Run Code Online (Sandbox Code Playgroud)

在QT:

QProcess *proc = new QProcess;
proc->setReadChannelMode(QProcess::SeparateChannels);
proc->start("program < \"file1\" > \"file2\"", QIODevice::ReadWrite);
Run Code Online (Sandbox Code Playgroud)

但不知怎的,它不起作用.我在taskmanager中看到,该命令看起来正确,但似乎程序在没有任何参数的情况下执行.我的错误在哪里?

qt stdin stdout qprocess

4
推荐指数
1
解决办法
1792
查看次数

我如何阅读QProcess?

我有这个简单的C++程序:

int main(int argc, char *argv[])
{

    QCoreApplication a(argc, argv);

    QProcess ps;
    QByteArray ba;

    ps.start("ls J:");
    ba = ps.readAllStandardOutput();
    char *someData = ba.data();

    cout << "Testing QProcess ..." << endl;
    cout << someData << endl;
    cout << "done!" << endl;

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Testing QProcess ...


done!
Run Code Online (Sandbox Code Playgroud)

如果我从Windows cmd运行"ls J:"它可以工作.我错过了什么?

c++ qt qprocess

4
推荐指数
1
解决办法
8388
查看次数

QProcess不执行python脚本

我正在尝试在Qt(在Linux中)执行一个执行python脚本的进程,但我无法使其工作.这是代码:

QProcess process;
QString scriptFile = "../../scriptPath/script.py";

QString pyCommand = "\"python " + scriptFile + 
                    " -f " + parameter1 +
                    " -t parameter2" +
                    " -v parameter3" +
                    " -e " + parameter4 + "\"";

printf("PyCommand: %s\n", qStringToStdString(pyCommand).c_str());

process.start ("bash", QStringList () << "-c" << pyCommand);
Run Code Online (Sandbox Code Playgroud)

其中parameter1parameter3是将QString,我从文件对话框得到(两条路径是正确的),并parameter2parameter4有硬编码字符串(以防万一,这些字符串的字符" - "和他们"").函数qStringToStdString是我创建的一个函数,用于将a转换QString为a std::string并且它工作正常(我已经使用过它).

PyCommand在控制台中打印,看起来很好.事实上,如果我打开一个终端并尝试执行bash -c后面的printf指令,它的工作原理.但是当我执行Qt应用程序时它不起作用.

有人可以帮帮我吗?我错过了什么?

c++ python qt qprocess qtcore

4
推荐指数
1
解决办法
5281
查看次数

Qt避免警告'QProcess:在进程仍在运行时被破坏

最简单的代码:

void test
{
    QProcess p;
    p.start("sleep 10");
    p.waitForBytesWritten();
    p.waitForFinished(1);
}
Run Code Online (Sandbox Code Playgroud)

当然,该过程无法在函数结束之前完成,因此它会显示一条警告消息:

 QProcess: Destroyed while process ("sleep") is still running.
Run Code Online (Sandbox Code Playgroud)

我希望这条消息不被显示 - 我应该在结束函数之前自己销毁这个过程,但我找不到如何正确地做到这一点:p.~QProcess(),p.terminate(),p.kill( )无法帮助我.

注意:我不想等待进程执行,只是在运行时自己杀死它.

c++ qt qprocess qtcore

4
推荐指数
1
解决办法
5123
查看次数

将lambda函数连接到QProcess :: error时出错

在下面的代码中,我想将lambda函数连接到QProcess :: error signal:

void Updater::start() {
    QProcess process;
    QObject::connect(&process, &QProcess::error, [=] (QProcess::ProcessError error) {
        qWarning() << "error " << error;
    });
    process.start("MyProgram");
    process.waitForFinished();
}
Run Code Online (Sandbox Code Playgroud)

但我得到奇怪的错误:

错误:没有匹配函数来调用'Updater :: connect(QProcess*[未解析的重载函数类型],Updater :: start()::)'});

我在这做错了什么?代码在从QObject派生的类的方法内执行.该项目配置为使用c ++ 11.

我在Linux x32上使用Qt 5.3.1和gcc 4.9.2

lambda qt qprocess c++11

4
推荐指数
1
解决办法
1000
查看次数

QProcess :: setStandardOutputFile仅创建0kb文件

我在WindowsXP-Machine上使用简单的QProcess-Project:

QString program = "U:\\ffmpeg.exe";
QStringList arguments;
arguments << "-i" << "U:\\clock.avi" << "U:\\tmp_jpeg\\foo-%03d.jpeg";

process.setStandardOutputFile("U:\\log.txt", QIODevice::Append);
process.start(program, arguments);
Run Code Online (Sandbox Code Playgroud)

该过程工作得很好,ffmpeg创建我想要的所有文件.但是log-File保持完全为空.当我想在qDebug()处写标准输出时也会发生同样的情况...为什么会发生这种情况,我该如何解决?

qt stdout qt4 qprocess

3
推荐指数
1
解决办法
1591
查看次数

QProcess :: kill()和QProcess :: terminate()之间有什么区别?

我读了一些文档,但对我来说还不够清楚.我知道两个"结束"进程并且kill()意味着强制它结束,但是终止()应该做什么呢?

c++ qt qprocess difference

3
推荐指数
1
解决办法
3596
查看次数

如何在 PyQt5 中排队 QProcesses?

我想在 PyQt5 中排队 QProcess 或者只是阻塞,同时仍然使用 readAll() 读取标准输出。相当于 subprocess.call 而不是 subprocess.Pop。当使用 waitForFinished() 时,带有 readAll() 的 stdout 将在进程结束时立即出现,而不是在处理过程中流出。

示例脚本:

from PIL import Image
import numpy as np
import sys
from PyQt5 import QtGui,QtCore, QtWidgets

class gui(QtWidgets.QMainWindow):
    def __init__(self):
        super(gui, self).__init__()
        self.initUI()

    def dataReady(self):
        cursor = self.output.textCursor()
        cursor.movePosition(cursor.End)
        cursor.insertText(str(self.process.readAll(), "utf-8"))
        self.output.ensureCursorVisible()


    def callProgram(self):
        # run the process
        # `start` takes the exec and a list of argument

        filepath = 'path\image.tif'

        self.process.start('some_command filepath'])

        # This will output a file image.tif specified by filepath: 

        # …
Run Code Online (Sandbox Code Playgroud)

python pyqt qprocess pyqt5

3
推荐指数
1
解决办法
1425
查看次数

标签 统计

qprocess ×10

qt ×9

c++ ×6

python ×2

qtcore ×2

stdout ×2

c++11 ×1

difference ×1

lambda ×1

pyqt ×1

pyqt5 ×1

qdialog ×1

qt4 ×1

qthread ×1

stdin ×1