crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Консоль для вывода log'ов, из чего?
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2009, 12:53
Сообщение #21


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(NordWest @ 16.2.2009, 15:12) *
Если в классе MainWindow, в котором работа и происходит написать clog <<, то пишет - clog не объявлен.
т.к. ты установил обработчик сообщений, то пользуешся им как обычно:
qDebug() << "My mesage:" << myVar;


просто этот самый обработчик в действительности будет отправлять информацию туда, куда в его коде написано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 16.2.2009, 22:01
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 9.2.2009
Пользователь №: 539

Спасибо сказали: 15 раз(а)




Репутация:   1  


я всегда говорю, что сначала нужно почитать документацию, если чего-то не понимаешь (в крайнем случае спросить)
qInstallMsgHandler() перенаправляет сообщения в clog, который связан с лог-файлом. такая связь сделана намеренно - чтобы была возможность работы без лог-файла только с выводом на консоль.
итого:
пользоваться данным сниппетом нужно следующим образом:
qDebug() << "My mesage:" << myVar;
qWarning() << "My mesage:" << myVar;
qCritical() << "My mesage:" << myVar;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.2.2009, 11:54
Сообщение #23


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


у меня вот такой код не работает
#include <QApplication>
#include <QTextStream>
#include <iostream>

int main(int a,char** b)
{
    std::cout<<"STDIN_FILENO = "<<STDIN_FILENO<<"\n";
    std::cout<<"STDOUT_FILENO = "<<STDOUT_FILENO<<"\n";
    std::cout<<"STDERR_FILENO = "<<STDERR_FILENO<<"\n";

    QApplication app(a,b);
    QTextStream out(stdout);
            std::cout<<"status "<<out.status()<<"\n";
    out<<"output\n";
    return app.exec();
}


вывод
Раскрывающийся текст

STDIN_FILENO = 0
STDOUT_FILENO = 1
STDERR_FILENO = 2
status 0


такой приводит к ошибке при закрытии приложения
#include <QApplication>
#include <QTextStream>
#include <iostream>

QTextStream out(stdout);

int main(int a,char** b)
{
    std::cout<<"STDIN_FILENO = "<<STDIN_FILENO<<"\n";
    std::cout<<"STDOUT_FILENO = "<<STDOUT_FILENO<<"\n";
    std::cout<<"STDERR_FILENO = "<<STDERR_FILENO<<"\n";

    QApplication app(a,b);
            std::cout<<"status "<<out.status()<<"\n";
    out<<"output\n";
    return app.exec();
}

вывод тот же

некоректно срабатывает либо не срабаотывает строчка
out<<"output\n";

проверял
QTextStream in(stdin);
как ни странно работает. пробовал для QTextStream out(stdout) разные модификаторы доступа QIODevice::Append и т.д.
<_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.2.2009, 12:40
Сообщение #24


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


оказывается надо делать
либо так
out<<"output"<<endl;
либо
out.flush();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.2.2009, 17:56
Сообщение #25


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 24.2.2009, 15:40) *
out.flush();
можно сказать ключевой момент, тут на форуме несколько дней эта проблема обсуждалась - буферизация std-out
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.2.2009, 18:40
Сообщение #26


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


самое интересное что пофиг если под винду собирать и предварительно написать
setvbuf( stdout, NULL, _IONBF, 0 );
setvbuf( stderr, NULL, _IONBF, 0 );


пока не сделаешь flush() либо не дашь endl не получишь ничего на консоли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.2.2009, 18:58
Сообщение #27


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 24.2.2009, 21:40) *
endl не получишь ничего на консоли.
тоже не катит если ты выводишь и в стандартный поток вывода и в поток ошибок (последний не буферируемый)

kwisp, см. тему QTextStream, operator<< работает асинхронно?, непонятно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.2.2009, 21:10
Сообщение #28


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 24.2.2009, 18:58) *
тоже не катит если ты выводишь и в стандартный поток вывода и в поток ошибок (последний не буферируемый)

если честно не понял до конца.
что не катит то???
проверено либо endl либо flush()
хотя для верности еще раз проверю на работе завтра.:)




Цитата
endl Same as operator<<('\n') and flush().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 1:24