В 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;