crossplatform.ru

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

> Консоль для вывода log'ов, из чего?
NordWest
  опции профиля:
сообщение 12.2.2009, 14:26
Сообщение #1


Студент
*

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

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




Репутация:   0  


Нужен док-виджет для вывода в него построчно разной информации. Как вывод в консоль для консольного приложения.
QLabel вроде как будет затирать - не удобно.
Попробовал QTextEdit.

Сделал так:
conText = new QTextEdit(dockConWidget);
conText->setReadOnly(true);
conText->setTextColor(Qt::white);
conText->setTextBackgroundColor(Qt::black);
conText->resize(1280, 1000);
conScrollArea = new QScrollArea(dockConWidget);
conScrollArea->setBackgroundRole(QPalette::Shadow);
conScrollArea->setWidget(conText);
dockConWidget = new QDockWidget(tr("logs panel"),this,Qt::Widget);
dockConWidget->setWidget(conScrollArea);
dockConWidget->setMinimumSize(625,175);
dockConWidget->setFloating(true);
addDockWidget(Qt::BottomDockWidgetArea,dockConWidget);
dockConWidget->hide();


Вроде сойдет. Хотя видимо есть лучше средства.

А вот как теперь связать стандартное устройство вывода, например, с этим QTextEdit? Чтобы можно было выводить на него данные из различных частей программы. Из методов объектов-переменных, вызываемых из основного окна приложения.

Или хотя бы связать его с переменной QTextStream для вывода через "<<". Просто так не получается:
out = new QTextStream(conText);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Константин
  опции профиля:
сообщение 12.2.2009, 17:39
Сообщение #2


Студент
*

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

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




Репутация:   1  


static QDataStream* clog = 0;

void customMessageHandler(QtMsgType type, const char* msg)
{
    static const char* msgType[] =
    {
        "Debug    : ",
        "Warning  : ",
        "Critical : ",
        "Fatal    : "
    };

    static QTextStream cout(stdout);
    static QTextStream cerr(stderr);

    cerr << msgType[type] << msg << endl;
    if(clog && clog->device())
        *clog << type << msg;
    if(type == QtFatalMsg)
    {
        cerr << "aborting..." << endl;

#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_CRT_ERROR) && defined(_DEBUG)
        int reportMode = _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
        _CrtSetReportMode(_CRT_ERROR, reportMode);
        int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, msg);
        if(ret == 0 && reportMode & _CRTDBG_MODE_WNDW)
            return;
        else if(ret == 1)
            _CrtDbgBreak();
#endif

#if defined(Q_OS_UNIX) && defined(QT_DEBUG)
        abort();
#else
        exit(1);
#endif
    }
}

int main(int argc, char** argv)
{
    qInstallMsgHandler(customMessageHandler);

    QApplication app(argc, argv);

    QFile* logFile = new QFile(_path_to_logdir_ + "/messages.log");
    if(logFile->open(QFile::WriteOnly | QIODevice::Append | QIODevice::Unbuffered))
        clog = new QDataStream(logFile);

//...

    int exit_code = app.exec();

    delete clog;
    clog = 0;
    delete logFile;
    logFile = 0;

    qInstallMsgHandler(0);

    return exit_code;
}

благодарите :)

пример простой - усложняйте под задачу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 16.2.2009, 12:12
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(Константин @ 12.2.2009, 17:39) *
static QDataStream* clog = 0;

...
пример простой - усложняйте под задачу.


Попробовал.
Как то непонятно. Видимо что-то надо с пространством имен делать. Вывод в файл пишет, но не весь. Так как правильно выводить в лог-файл. По clog? Или cout? Если в классе MainWindow, в котором работа и происходит написать clog <<, то пишет - clog не объявлен. Если cout, то же самое. Пишешь в MainWindow.cpp
Цитата
using namespace std;
, чтобы cout определить - по clog << выдает в консоль а в файле такое вот:
Цитата
LQPainter::begin: Widget painting can only begin as a result of a paintEvent  LQPainter::begin: Widget painting can only begin as a result of a paintEvent
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- NordWest   Консоль для вывода log'ов   12.2.2009, 14:26
- - kwisp   NordWest, ЦитатаНужен док-виджет для вывода в нег...   12.2.2009, 14:46
|- - NordWest   Цитата(kwisp @ 12.2.2009, 14:46) NordWest...   12.2.2009, 15:24
- - Litkevich Yuriy   NordWest, поищи по форуму о пренаправлении вывода ...   12.2.2009, 15:35
- - kwisp   NordWest, ЦитатаЕсли консоль прикрутить, она буде...   12.2.2009, 15:42
|- - NordWest   Цитата(kwisp @ 12.2.2009, 15:42) тут дело...   12.2.2009, 16:05
- - Litkevich Yuriy   Цитата(NordWest @ 12.2.2009, 19:05) Напис...   12.2.2009, 16:08
- - kwisp   NordWest, пишешь под виндой? или под линуксом? ил...   12.2.2009, 16:11
|- - NordWest   Цитата(kwisp @ 12.2.2009, 16:11) NordWest...   12.2.2009, 17:43
- - Litkevich Yuriy   kwisp, да вывод в консоль это только для разработч...   12.2.2009, 16:25
- - kwisp   Litkevich Yuriy, конечно мимо, там перенаправлени...   12.2.2009, 16:37
- - Litkevich Yuriy   я думаю надо просто свой класс сделать, который бу...   12.2.2009, 16:38
- - Константин   static QDataStream* clog = 0; void customMessageH...   12.2.2009, 17:39
|- - NordWest   Цитата(Константин @ 12.2.2009, 17:39) sta...   16.2.2009, 12:12
- - kwisp   Litkevich Yuriy, не..... Константин верно написа...   12.2.2009, 17:40
- - Litkevich Yuriy   Цитата(Litkevich Yuriy @ 12.2.2009, 18:35...   12.2.2009, 17:48
|- - NordWest   Прошу прощения за молчание - провайдер озверел на ...   12.2.2009, 21:10
- - Константин   Цитата(kwisp @ 12.2.2009, 17:40) qInstall...   12.2.2009, 17:53
|- - kwisp   Цитата(Константин @ 12.2.2009, 17:53) Цит...   12.2.2009, 17:57
- - Litkevich Yuriy   Цитата(NordWest @ 13.2.2009, 0:10) понять...   12.2.2009, 21:41
- - Litkevich Yuriy   Цитата(NordWest @ 16.2.2009, 15:12) Если ...   16.2.2009, 12:53
- - Константин   я всегда говорю, что сначала нужно почитать докуме...   16.2.2009, 22:01
- - kwisp   у меня вот такой код не работает #include <QAp...   24.2.2009, 11:54
|- - kwisp   оказывается надо делать либо так out<<...   24.2.2009, 12:40
- - Litkevich Yuriy   Цитата(kwisp @ 24.2.2009, 15:40) out.flus...   24.2.2009, 17:56
- - kwisp   самое интересное что пофиг если под винду собирать...   24.2.2009, 18:40
- - Litkevich Yuriy   Цитата(kwisp @ 24.2.2009, 21:40) endl не ...   24.2.2009, 18:58
- - kwisp   Цитата(Litkevich Yuriy @ 24.2.2009, 18:58...   24.2.2009, 21:10


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


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




RSS Текстовая версия Сейчас: 25.11.2024, 12:19