crossplatform.ru

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


  Ответ в Qtcreator как перенапривить вывод cout ?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
wiz29 Дата 31.5.2011, 10:20
 
Цитата(flankerr @ 31.5.2011, 10:11) *
Подскажи как ? :rolleyes:

std::streamsize QDebugStream::xsputn(const char *p, std::streamsize n) {
    m_String.append(p, p + n);
//    unsigned int pos = 0;
//    while (pos != std::string::npos) {
//        pos = m_String.find('\n');
//        if (pos != std::string::npos) {
//            std::string tmp(m_String.begin(), m_String.begin() + pos);
//            qDebug(tmp.c_str());
//            m_String.erase(m_String.begin(), m_String.begin() + pos + 1);
//        }
//    }
    qDebug(m_String.c_str());
    m_String.clear();
    return n;
}

примерно так.

Цитата(flankerr @ 31.5.2011, 11:06) *
И всё таки ради консоли такой гемор это просто алес капут....

ну 150 строк кода для, по сути, универсального метода не гемор, а профит на лицо.
flankerr Дата 31.5.2011, 10:06
  И всё таки ради консоли такой гемор это просто алес капут....

Кстати, может всё таки подскажет кто зачем в QtCreator есть опция "запускать в терминале". Не оно понятно что запустит якобы через терминал и будет висеть окно консольки но оно вообще не функционально - туда вообще ни чего ни когда не выводиться не одним из извсетных мне способов... Спрашивай на кой оно вообще.

flankerr Дата 31.5.2011, 9:11
 
Цитата(wiz29 @ 30.5.2011, 19:43) *
Цитата(RazrFalcon @ 30.5.2011, 19:28) *
Хм, у меня тоже std::cout выводит после завершения. Linux.
Просто нужно немного модифицировать код wrapper'а, тогда будет выводить сразу.

Подскажи как ? :rolleyes:


Цитата(Litkevich Yuriy @ 30.5.2011, 19:07) *
Цитата(flankerr @ 30.5.2011, 13:18) *
Под Windows это НE работает !
а у меня работает ;)
Ну это если запукать не через QtCreator. А для отладки нужен QtCreator при запуске через который не пашет.
wiz29 Дата 30.5.2011, 18:43
  Да подобный код не работает для библиотек, причина тому в том, что реально в каждом модуле экземпляр std::cout свой.
данная статья возможно поможет тебе написать нужный код. В рамках одного приложения (без участия других модулей, приведенный мной способ железно работает)

Цитата(RazrFalcon @ 30.5.2011, 19:28) *
Хм, у меня тоже std::cout выводит после завершения. Linux.

Просто нужно немного модифицировать код wrapper'а, тогда будет выводить сразу.
RazrFalcon Дата 30.5.2011, 18:28
  Хм, у меня тоже std::cout выводит после завершения. Linux.
Litkevich Yuriy Дата 30.5.2011, 18:07
 
Цитата(flankerr @ 30.5.2011, 13:18) *
Под Windows это НE работает !
а у меня работает ;)
flankerr Дата 30.5.2011, 17:24
  Вывод из модуля вообще не работает и с flush и без - не работает.

В общем вариант с перенаправлением как и показался вначале - оказался кривым и по сути не рабочим.
flankerr Дата 30.5.2011, 16:52
  Криво всё это...

вот тестовый код в рамках qt апликухи
void foo();
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
   QDebugStream qdsOut(std::cout);
   QDebugStream qdsErr(std::cerr);

   std::cout << "Этот текст выводит сразу";
   foo();
}

foo()
{
     std::cout << "Этот текст выведется только после закрытия приложения и разумеется полсе вывода qDebug" << std::flush;
    std::cout.flush();
    qDebug()<< "вывод qDebug"; //эта строка напечатается раньше чем предыдущая
}
wiz29 Дата 30.5.2011, 14:18
  Должно сработать, тк std::cout синглтон
flankerr Дата 30.5.2011, 14:16
  Да, именно, есть не мои модули без Qt вывод которых я хочу видеть у себя в своей апликухе.
Впринципе елси эвариант с перенаправлением в qDebug сработает для не Qt-го модуля меня это устроит.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 23:15