Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Aggiungere testo ad una QTextEdit alla fine di un processo



  • ciao!

    alla fine di un processo QProcess devo aggiungere un testo a quello già presente nella QTextEdit.
    per farlo ho fatto cosi:

    void MainWindow::execCmd(QString cmd) {
        ui->txtRes->clear();
        ui->txtUrl->setEnabled(false);
        ui->btnDownload->setEnabled(false);
    
        process = new QProcess();
        if (process) {
            process->setEnvironment(QProcess::systemEnvironment());
            process->setProcessChannelMode(QProcess::MergedChannels);
            process->start(cmd);
            process->waitForStarted();
            connect(process, &QProcess::readyReadStandardOutput, this, &MainWindow::readOutput);
            connect(process, &QProcess::readyReadStandardError, this, &MainWindow::readError);
        }
    }
    
    void MainWindow::processFinished(int code, QProcess::ExitStatus status) {
        ui->txtRes->setText(ui->txtRes->toPlainText() + "\n" + "TERMINATO");
        ui->txtUrl->setEnabled(true);
        ui->txtUrl->setText("");
        ui->btnDownload->setEnabled(true);
        process->kill();
    }
    
    void MainWindow::readOutput() {
        QProcess *process = dynamic_cast<QProcess*>(sender());
        if (process) {
            ui->txtRes->append(process->readAllStandardOutput());
            connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus)));
        }
    }
    
    void MainWindow::readError() {
        QProcess *process = dynamic_cast<QProcess*>(sender());
        if (process) {
            QPalette p = ui->txtRes->palette();
            p.setColor(QPalette::Text, Qt::red);
            ui->txtRes->setPalette(p);
            ui->txtRes->append(process->readAllStandardError());
        }
    }
    

    solo che la parola TERMINATO mi viene scritta parecchie volte.
    anche una ventina a volte, e non capisco il perchè.



  • @mrdebug said in Aggiungere testo ad una QTextEdit alla fine di un processo:

    Ciao, ti consiglio di mettere tutte le connect prima dello start, compresa quella relativa all'evento finished().

    si infatti il problema era quello.
    grazie!!



  • Ciao, ti consiglio di mettere tutte le connect prima dello start, compresa quella relativa all'evento finished().



  • @mrdebug said in Aggiungere testo ad una QTextEdit alla fine di un processo:

    Ciao, ti consiglio di mettere tutte le connect prima dello start, compresa quella relativa all'evento finished().

    si infatti il problema era quello.
    grazie!!


Log in to reply