В Qt: можно ли вывести на `stdout` так же легко, как вывести на`stderr` с помощью qDebug()?

До сих пор я выводил все, используя qDebug().noquote(), Это легко, потому что это просто требует простого #import <QDebug>

Теперь мне нужно все, чтобы вывести на stdout, но я не знаю, как это легко сделать. Вот как меня учили:

QTextStream cout(stdout, QIODevice::WriteOnly);

Тем не менее, создание нового объекта немного сложнее, чем простой #import <QDebug>, Каков хороший / наименее громоздкий способ справиться stdout в QT?

2 ответа

qDebug(), qInfo()и т. д. все передаются обработчику сообщений по умолчанию. Но вы можете легко установить свою собственную, которая записывает строки отладки в другой поток, файл или что-либо еще. Все, что вам нужно сделать, это определить функцию обработчика сообщений и установить ее с помощью qInstallMessageHandler ().

Собираем все вместе, вот полный пример:

#include <QDebug>

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QTextStream cout(stdout, QIODevice::WriteOnly);
    cout << msg << endl;
}

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

    qDebug().noquote() << "Hello world!";
}

Лучший способ - тот, который вы упомянули. Вам не нужно создавать новую локальную переменную:

QTextStream(stdout) << "Hello world!" << endl;

Если исходный текст не в кодировке Latin-1, вам необходимо преобразовать в QString перед передачей его оператору потока:

QTextStream(stdout) << QString("utf8 literal") << endl;
Другие вопросы по тегам