crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> qWarning(QString) Не хочет работать с qApp->tr("someText")
Гость_qp_*
сообщение 13.7.2010, 12:46
Сообщение #1





Гости








    


Организую вывод вообщений. есть функция обрабатывающая сообщения:

void MsgOutput(QtMsgType type, const char *msg)
{
    switch(type)
    {
    case QtDebugMsg:
        QMessageBox::critical(0, qApp->tr("Debug"), qApp->tr(msg), QMessageBox::Cancel);
        break;
.....
     }
}


есть хендлер:

qInstallMsgHandler(MsgOutput);

далее вызываем сообщени:

Вот кусок кода который не работает: qWarning(qApp->tr("Некоторый текст");

Ошибка: no matching function for call to 'qWarning(QString)'

Вот кусок кода который работает: qWarning("Некоторый текст"); или qWarning(qApp->tr("Некоторый текст").toUtf();


однако в случае с русским выходят кракозябли? а мне нужен именно русский. и именно Utf

для tr() у меня:

QTextCodec *Unicode = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(Unicode);


Помогите разобраться почему так? Что можно сделать чтобы выводился нормально текст??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 13.7.2010, 13:14
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Компилятор тебе уже обо всем сообщил:
Цитата
no matching function for call to 'qWarning(QString)'
Т.е. qWarning не может в качестве параметра принимать QString.

Делай так:
qWarning() << qApp->tr("Некоторый текст");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_qp_*
сообщение 13.7.2010, 13:53
Сообщение #3





Гости








    


Да, так действительно собирается без ошибок, но русский текст выводится квадратами.
варианты типа:

qWarning() << qApp->tr("Некоторый текст").toUtf();
qWarning() << qApp->tr("Некоторый текст").toLocal8Bit;

Неработают.
Интересно, но русский текст в окне диалога отображается корректно. текст генерируемых мессагов — квадратами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 13.7.2010, 15:00
Сообщение #4


Участник
**

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

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




Репутация:   2  


Цитата(qp @ 13.7.2010, 19:53) *
Да, так действительно собирается без ошибок, но русский текст выводится квадратами.
варианты типа:

qWarning() << qApp->tr("Некоторый текст").toUtf();
qWarning() << qApp->tr("Некоторый текст").toLocal8Bit;

Неработают.
Интересно, но русский текст в окне диалога отображается корректно. текст генерируемых мессагов — квадратами.

trUtf8 не судьба вставить ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.7.2010, 16:31
Сообщение #5


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

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

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




Репутация:   94  


Цитата(Гость_qp_* @ 13.7.2010, 16:46) *
QMessageBox::critical(0, qApp->tr("Debug"), qApp->tr(msg), QMessageBox::Cancel);
Цитата(Гость_qp_* @ 13.7.2010, 17:53) *
qWarning() << qApp->tr("Некоторый текст").toUtf();
qWarning() << qApp->tr("Некоторый текст").toLocal8Bit;
выделенный tr() лишний. Попробуй проанализировать, как произойдут преобразования кодировок
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_qp_*
сообщение 14.7.2010, 8:59
Сообщение #6





Гости








    


не работает.
qWarning() << qApp->tr("Некоторый текст");
QMessageBox::critical(0, qApp->tr("Debug"), msg, QMessageBox::Cancel);

так тоже:
qWarning("Некоторый текст");
QMessageBox::critical(0, qApp->tr("Debug"), qApp->tr(msg), QMessageBox::Cancel);


Насколько я понимаю, проблема в том что неправильно qWarning сообщение передает, потому что если в функции выводящей сообщение сделать:
void MsgOutput(QtMsgType type, const char *msg)
{
msg="русский текст";
...

То выводится нормально. Значит спроблема в qWarning. и const char*, Проджект у меня в UTF-8


Есть ещё идеи?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 14.7.2010, 9:19
Сообщение #7


Участник
**

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

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




Репутация:   2  


Цитата(qp @ 14.7.2010, 14:59) *
не работает.
qWarning() << qApp->tr("Некоторый текст");
QMessageBox::critical(0, qApp->tr("Debug"), msg, QMessageBox::Cancel);

так тоже:
qWarning("Некоторый текст");
QMessageBox::critical(0, qApp->tr("Debug"), qApp->tr(msg), QMessageBox::Cancel);


Насколько я понимаю, проблема в том что неправильно qWarning сообщение передает, потому что если в функции выводящей сообщение сделать:
void MsgOutput(QtMsgType type, const char *msg)
{
msg="русский текст";
...

То выводится нормально. Значит спроблема в qWarning. и const char*, Проджект у меня в UTF-8


Есть ещё идеи?

писал же уже про tfUtf8 !!!!!
qWarning() << qApp->trUtf8("Некоторый текст");

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.7.2010, 9:29
Сообщение #8


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

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

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




Репутация:   94  


maint, твой вариант аналогичен:
QTextCodec *Unicode = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(Unicode);
qWarning() << qApp->tr("Некоторый текст");

т.е. тому что у него.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 14.7.2010, 9:52
Сообщение #9


Участник
**

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

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




Репутация:   2  


Цитата(Litkevich Yuriy @ 14.7.2010, 15:29) *
maint, твой вариант аналогичен:
QTextCodec *Unicode = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(Unicode);
qWarning() << qApp->tr("Некоторый текст");

т.е. тому что у него.


да, забыл, виноват
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_qp_*
сообщение 14.7.2010, 10:17
Сообщение #10





Гости








    


пофиксил. Всё оказалось вот так:

генерируем:

qWarning()<<(qApp->tr("Некоторый текст"));

отображаем мессаг вот так:

void MsgOutput(QtMsgType type, const char *msg)
switch(type)
{
case QtDebugMsg:
QMessageBox::critical(0, qApp->tr("Debug"), QString::fromLocal8Bit(msg, -1), QMessageBox::Cancel);
break;
....


Тоесть qWarning либо переделывает сообщение в локальную кодировку, либо передает один символ как два. тоесть там же конст чар он принимает один байт, а UTF кодируется двумя.

Всем спасибо

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 4.7.2020, 23:51