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

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

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ qDebug() << QString (еще раз плиз)

Автор: smooky 29.10.2008, 23:53

Извиняюсь что еще раз беспокою!

Может всётаки мне ктонибудь приоткроет тайну: что нужно сделать чтобы можно было писать вот так:
...
QString str = "Damned QT!!!";
qDebug() << str; // вот так хочется
qDebug(str); // или так
...

// пока только так приходится писать
qDebug(str.toStdString().c_str());

P.S. Еще раз повторю: очень жаль что на выяснение такие простые вещи приходится тратить столько времени! Библиотека НЕ должна быть так устроена!

Автор: Litkevich Yuriy 30.10.2008, 0:05

Цитата(smooky @ 30.10.2008, 2:53) *
QString str = "Damned QT!!!";
qDebug() << str; // вот так хочется
qDebug(str); // или так
а в чем проблема?

Вот рабочий пример:
main.cpp
//UTF-8 (w/o BOM)
#include <QtGui>

int main(int argc, char** argv)
{
  QString        locale;            // язык локали
  QTranslator    *apptr;    // переводчики бибилиотеки и программы
  
  
    QApplication app(argc, argv);

    // Кодек для tr() / Codec for tr()
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    // Устанавливаем превод программы
    locale = "en"/*QLocale::system().name()*/;    // запрос языка (например: "ru")
qDebug() << "locale is " << locale;
    apptr = new QTranslator;
    apptr->load(QString("app_") + locale); // загрузка файла qt_*.qm
    qApp->installTranslator(apptr);         // установка переводчика    
qDebug() << apptr;



    // Метка / Label
    QLabel lbl(QObject::tr("Test-Привет-Test"));
    // Отобразить / Show
    lbl.show();




    return app.exec();

}

testproj.pro

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
SOURCES += main.cpp

#======== Translation ===============
TRANSLATIONS    = app_en.ts
CODECFORTR      = UTF-8

CONFIG (debug, debug|release) {
    CONFIG       += console
}


Автор: Litkevich Yuriy 30.10.2008, 6:30

smooky, про регулярки тему создавай отдельно, эта тема называется :
qDebug() << QString (еще раз плиз)
когда человек будет искать про регулярки, у него не будет асоциаций с этой темой.

Цитата(smooky @ 30.10.2008, 4:57) *
Неа! Не работает! Ну да ладно - это видимо проклятье! Даже не хочу разбираться - почему! ,-(
Ищи касяк, Qt здесь не причем. У всех это работает, кроме тебя. Не решишь эту проблему - не ришишь не одной.

Проверяй вот этот пример:  test12.zip ( 801 байт ) : 551
, ничего в нем не меняя собери так:
qmake
make

запусти и отпишись, что ты видишь.

вместо make для MinGW32 используй mingw32-make

Автор: smooky 30.10.2008, 6:40

Цитата(Litkevich Yuriy @ 30.10.2008, 9:30) *
smooky, про регулярки тему создавай отдельно, эта тема называется :
qDebug() << QString (еще раз плиз)
когда человек будет искать про регулярки, у него не будет асоциаций с этой темой.

Цитата(smooky @ 30.10.2008, 4:57) *
Неа! Не работает! Ну да ладно - это видимо проклятье! Даже не хочу разбираться - почему! ,-(
Ищи касяк, Qt здесь не причем. У всех это работает, кроме тебя. Не решишь эту проблему - не ришишь не одной.

Проверяй вот этот пример:  test12.zip ( 801 байт ) : 551
, ничего в нем не меняя собери так:
qmake
make

запусти и отпишись, что ты видишь.

вместо make для MinGW32 используй mingw32-make


собралось!!! :-)
чот у меня косяк гдето! Буду разбираться! Спасибо!

P.S. У меня Ubuntu 8.04, gcc 4.2.4
Виндуса нэту!

Автор: Litkevich Yuriy 30.10.2008, 7:15

smooky, скажи еще версию Qt, лучше так посмотреть:
qmake -v

Автор: shmurva 23.2.2011, 22:15

Русский текст в Qt можно ещё сделать так:

1. Работает для GUI приложений.
Начинает отображаться русский текст, загружаемый из текстовыйх файлов с кодировкой ANSI,
а также введённый в программе руский текств QPlainText успешно сохраняется в файл (через QFile) в кодировке ANSI.

    // Вызвать в любом месте (можно даже в main-функции).
    QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec::setCodecForCStrings(codec);
    // После этого загружается и отображается русский текст
    // как в GUI так и в сохраняемых текстовых файлах (ANSI)


http://dxdy.ru/topic26293.html

2. Не будет работать при выводе в консоль

qDebug() << "Этот текст будет в эроглифах"; // перебор вместо "cp1251" других кодировок ничего не дал (может не нашёл просто)

3. Чтобы работал интерфейс qDebug() << "MyText";
Надо подключить файл
#include <QtGui>

Автор: Litkevich Yuriy 23.2.2011, 22:28

Цитата(shmurva @ 24.2.2011, 0:15) *
2. Не будет работать при выводе в консоль
qDebug() << "Этот текст будет в эроглифах"; // перебор вместо "cp1251" других кодировок ничего не дал (может не нашёл просто)
можно, например, сделать так:
void myMessageOutput(QtMsgType type, const char *msg)
{
    QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
    
    switch (type) {
    case QtDebugMsg:{
        QTextStream err(stderr);
        err.setCodec(outCodec);
        err << QString(msg) << endl;
        //fprintf(stderr, "Debug: %s\n", msg);
        break;
    }case QtWarningMsg:
        fprintf(stderr, "Warning: %s\n", msg);
        break;
    case QtCriticalMsg:
        fprintf(stderr, "Critical: %s\n", msg);
        break;
    case QtFatalMsg:
        fprintf(stderr, "Fatal: %s\n", msg);
        abort();
    }
}

int main(int argc, char *argv[])
{
    qInstallMsgHandler(myMessageOutput);
    QApplication app(argc, argv);
    ...

А строковые литералы оборачивать в некую функцию, которая будет корректно перекодировать в UTF-16. Я чаще всего исходники держу в UTF-8, поэтому использую такой способ:
qDebug() << QObject::trUtf8("Этот текст будет в на русском");
хоть перевод его меня и не интерисует. Можно использовать функции QTextCodec.

Автор: Rocky 24.2.2011, 8:50

Цитата(shmurva @ 23.2.2011, 22:15) *
3. Чтобы работал интерфейс qDebug() << "MyText";
Надо подключить файл

#include <QtGui>

Достаточно подключать
#include <QDebug>

Автор: TiiL 6.7.2011, 8:25

Приветствую, вот есть такое :

#include <QDebug>
код программы...

qDebug() << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";

код программы...


и сразу вылезают такие ошибки

n file included from c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qlist.h:50,

from c:\Qt\2010.05\qt\include/QtCore/qlist.h:1,

from c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qhash.h:48,

from c:\Qt\2010.05\qt\include/QtCore/qhash.h:1,

from c:\Qt\2010.05\qt\include\QtCore/../../src/corelib/io/qdebug.h:46,

from c:\Qt\2010.05\qt\include\QtCore/qdebug.h:1,

from c:\Qt\2010.05\qt\include\QtCore/QDebug:1,

from dos_phys.cpp:16:

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator:74: error: 'std::input_iterator_tag' has not been declared

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator: In function 'void __gnu_cxx::__distance(_RandomAccessIterator, _RandomAccessIterator, _Distance&, std::random_access_iterator_tag)':

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator:87: error: '<anonymous>' has incomplete type

c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qiterator.h:51: error: forward declaration of 'struct std::random_access_iterator_tag'

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator: In function 'void __gnu_cxx::distance(_InputIterator, _InputIterator, _Distance&)':

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator:107: error: '__iterator_category' is not a member of 'std'

Автор: RazrFalcon 6.7.2011, 11:53

#include <QtDebug>

Автор: TiiL 6.7.2011, 13:56

да в том и дело что QtDebug or Qdebug одна и таже ошибка!

не хочет он её

Автор: Алексей1153 7.7.2011, 6:29

Цитата
c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator:74: error: 'std::input_iterator_tag' has not been declared

c:\Qt\2010.05\mingw\lib\gcc\mingw32\4.4.0\include\c++\ext/iterator: In function 'void __gnu_cxx::__distance(_RandomAccessIterator, _RandomAccessIterator, _Distance&, std::random_access_iterator_tag)':


не прописан какой-то заголовок STL

может

#include <iterator>

Автор: Litkevich Yuriy 7.7.2011, 7:55

TiiL, делай мнимальный пример, например:

#include <QDebug>

int main(int argc, char** argv)
{
  qDebug() << "test";
}
И смотри будет компилироваться или нет.

Автор: TiiL 7.7.2011, 8:08

разобрался.

#include <string>
и ошибки исчезли.

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