Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Вывод в кольсоль в ту же строку

Автор: NordWest 19.5.2011, 15:55

Как вот сделать, чтобы выводить в консоль, по qDebug например, не в новую строчку, а взамен предыдущей. Т.е. процент выполнения процесса в частности. Чтобы не куча строк писалась, а одна. В которой меняется число. Давно хотел узнать.

Автор: Litkevich Yuriy 19.5.2011, 17:05

нужно вместо конца строки (перевод строки+возврат каретки) делать только возврат каретки - "\r".
пример:

QTextStream out(stdout);

out << trUtf8("Копирование:\n");
double current = 0;
foreach(QString sFileName, all){
    ++current;
    out << "Complete: "
        << ( (current * 100)/cnt) << qSetRealNumberPrecision(3)
        << "%    \r" << flush;
    
    // Делаем полезную работу
}
out << reset << endl << flush;
здесь qSetRealNumberPrecision(3) задаёт формат вывода в консоль (стандартный поток вывода), а reset - сбрасывает в исходное состояние настройки потока.

Т.к. qDebug() всегда делает "конец строки", то прийдётся глобально для всего приложения переопределять работу обработчиков qDebug(), qFatal(),...
(см. http://doc.crossplatform.ru/qt/4.7.x/qtglobal.html#qInstallMsgHandler)

Автор: NordWest 19.5.2011, 18:10

Так просто, а какое счастье! Спасибо огромное за ликбез! :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)