Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt readAllStandardOutput()导致程序意外结束_Qt_Qt4 - Fatal编程技术网

Qt readAllStandardOutput()导致程序意外结束

Qt readAllStandardOutput()导致程序意外结束,qt,qt4,Qt,Qt4,当我尝试将readAllStandardOutput()发送到QString时,我会遇到意外的程序崩溃,即使我将QByTestStream连接到QString,你知道为什么吗?这是来源 主窗口 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QProcess> #include <QString> #include "exeprocess.h" /*m

当我尝试将readAllStandardOutput()发送到QString时,我会遇到意外的程序崩溃,即使我将QByTestStream连接到QString,你知道为什么吗?这是来源

主窗口

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>
#include <QString>


#include "exeprocess.h"

/*main window ---------------------------------------*/

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

signals:
    void outLog(QString outLogVar); //plug this into the QTextEdit box

public slots:
    void logReady(); // plug the QProcess into this


private:
    Ui::MainWindow *ui;
};




#endif // MAINWINDOW_H
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括“exeprocess.h”
/*主窗口---------------------------------------*/
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
QProcess*proc;
信号:
void outLog(QString outLogVar);//将其插入QTextEdit框
公众时段:
void logReady();//将QProcess插入此
私人:
Ui::MainWindow*Ui;
};
#endif//main窗口
mainwindow.cpp

#include <QByteArray>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QProcess *proc = new QProcess; //initialize proc
    QStringList arguments;
    arguments << "-h";

    connect(proc, SIGNAL(readyReadStandardOutput ()), this, SLOT(logReady()));

    proc->start("/Applications/Graphics/3Delight-9.0.87/bin/renderdl", arguments);

}

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

void MainWindow::logReady(){
    QString str = proc->readAllStandardOutput();
    emit outLog(str);
}
#包括
#包括“mainwindow.h”
#包括“ui_main window.h”
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QProcess*proc=新的QProcess;//初始化proc
QStringList参数;
参数开始(“/Applications/Graphics/3Delight-9.0.87/bin/renderdl”,参数);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::logReady(){
QString str=proc->readAllStandardOutput();
发射输出(str);
}

谢谢

这一行就是问题所在:

QProcess *proc = new QProcess; //initialize proc
您正在通过重用该名称来隐藏成员变量。调用logReady时,调用readAllStandardOutput()的“proc”是另一个(null)指针,因此所有内容都会崩溃。解决方法很简单:将上面的行替换为

proc = new QProcess;

这条线就是问题所在:

QProcess *proc = new QProcess; //initialize proc
您正在通过重用该名称来隐藏成员变量。调用logReady时,调用readAllStandardOutput()的“proc”是另一个(null)指针,因此所有内容都会崩溃。解决方法很简单:将上面的行替换为

proc = new QProcess;

这是一个梦,但我不知道为什么,你说的阴影是什么意思?谢谢PAG,j@jonathan当您声明本地
proc
变量时,它只是隐藏类成员变量的贴花,因此方法中
proc
的所有用法都引用本地变量,而不是成员变量。如果你至少有C++的最小知识,你应该看到错误,知道它是指出来的。它也可以是一个好主意,让主窗口成为进程的父,使用<代码>新QPrPoT(这个)< /C> >,这样它在主窗口被破坏时自动删除。@ Christian Rau我对这一点完全陌生,因此会犯一些愚蠢的错误,但我会在正确的帮助下达到目的:)谢谢你的快速回复。这是一个梦,但我不知道为什么,你说的阴影是什么意思?谢谢PAG,j@jonathan当您声明本地
proc
变量时,它只是隐藏类成员变量的贴花,因此方法中
proc
的所有用法都引用本地变量,而不是成员变量。如果你至少有C++的最小知识,你应该看到错误,知道它是指出来的。它也可以是一个好主意,让主窗口成为进程的父,使用<代码>新QPrPoT(这个)< /C> >,这样它在主窗口被破坏时自动删除。@ Christian Rau我对这一点完全陌生,因此会犯一些愚蠢的错误,但我会在得到正确帮助的情况下做到这一点:)谢谢你的快速回复。