Приложение QT не загружает выход терминалаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Приложение QT не загружает выход терминала

Сообщение Anonymous »

Я разрабатываю приложение с QT на macOS. Предполагается, что одна из функций этого приложения будет активировать команду Ollama Run вместе со строкой. Вывод показан в новом диалоге, который эффективно открывается. Я полагаю, что это связано с тем, что во втором случае ИИ требуется пару минут, чтобы дать полный вывод, и текст не дается мгновенно, и команды QT принимают только выход, предоставленный только после запуска команды. < /P>
Можете ли вы оказать какую -либо помощь? Спасибо. Здесь ниже я публикую функцию. < /P>
void TranslateHelper::onTranslateClicked() {
QString selectedText = textEdit->textCursor().selectedText();
if (selectedText.trimmed().isEmpty())
return;

QDialog *transDialog = new QDialog(dialog);
transDialog->setWindowTitle("Traduzione");
transDialog->resize(500, 200);
QVBoxLayout *layout = new QVBoxLayout(transDialog);
QLabel *label = new QLabel("Traduzione:", transDialog);
QPlainTextEdit *output = new QPlainTextEdit(transDialog);
output->setReadOnly(true);
layout->addWidget(label);
layout->addWidget(output);

QString prompt = QString("Traduci in italiano questa frase senza commenti ulteriori: \"%1\"").arg(selectedText);
QString command = "ollama";
QStringList args = {"run", "gemma3:4b", prompt};

QProcess *process = new QProcess(transDialog);
process->setProcessChannelMode(QProcess::MergedChannels);

QObject::connect(process, &QProcess::readyReadStandardOutput, [process, output]() {
QByteArray data = process->readAllStandardOutput();
if (!data.isEmpty()) {
output->moveCursor(QTextCursor::End);
output->insertPlainText(QString::fromUtf8(data));
output->ensureCursorVisible();
}
});

QObject::connect(process, &QProcess::readyReadStandardError, [process, output]() {
QByteArray err = process->readAllStandardError();
if (!err.isEmpty()) {
output->moveCursor(QTextCursor::End);
output->insertPlainText("ERROR: " + QString::fromUtf8(err));
output->ensureCursorVisible();
}
});

QObject::connect(process, QOverload::of(&QProcess::finished),
[process, output](int exitCode, QProcess::ExitStatus exitStatus) {
output->moveCursor(QTextCursor::End);
output->insertPlainText(QString("\n--- Processo terminato (Exit Code: %1, Status: %2) ---\n")
.arg(exitCode).arg(exitStatus == QProcess::NormalExit ? "Normal" : "Crash"));
output->ensureCursorVisible();
process->deleteLater();
});

QObject::connect(transDialog, &QDialog::finished, [process](int) {
if (process && process->state() != QProcess::NotRunning) {
process->kill();
process->waitForFinished(3000);
}
});

output->clear();
process->start(command, args);

transDialog->exec();
button->setVisible(false);
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... nal-output
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»