qWarning(QString) Не хочет работать с qApp->tr("someText") |
Здравствуйте, гость ( Вход | Регистрация )
qWarning(QString) Не хочет работать с qApp->tr("someText") |
Гость_qp_* |
13.7.2010, 12:46
Сообщение
#1
|
Гости |
Организую вывод вообщений. есть функция обрабатывающая сообщения:
есть хендлер: qInstallMsgHandler(MsgOutput); далее вызываем сообщени: Вот кусок кода который не работает: qWarning(qApp->tr("Некоторый текст"); Ошибка: no matching function for call to 'qWarning(QString)' Вот кусок кода который работает: qWarning("Некоторый текст"); или qWarning(qApp->tr("Некоторый текст").toUtf(); однако в случае с русским выходят кракозябли? а мне нужен именно русский. и именно Utf для tr() у меня:
Помогите разобраться почему так? Что можно сделать чтобы выводился нормально текст?? |
|
|
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. Делай так:
|
|
|
Гость_qp_* |
13.7.2010, 13:53
Сообщение
#3
|
Гости |
Да, так действительно собирается без ошибок, но русский текст выводится квадратами.
варианты типа: qWarning() << qApp->tr("Некоторый текст").toUtf(); qWarning() << qApp->tr("Некоторый текст").toLocal8Bit; Неработают. Интересно, но русский текст в окне диалога отображается корректно. текст генерируемых мессагов — квадратами. |
|
|
maint |
13.7.2010, 15:00
Сообщение
#4
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
Да, так действительно собирается без ошибок, но русский текст выводится квадратами. варианты типа: qWarning() << qApp->tr("Некоторый текст").toUtf(); qWarning() << qApp->tr("Некоторый текст").toLocal8Bit; Неработают. Интересно, но русский текст в окне диалога отображается корректно. текст генерируемых мессагов — квадратами. trUtf8 не судьба вставить ? |
|
|
Litkevich Yuriy |
13.7.2010, 16:31
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
QMessageBox::critical(0, qApp->tr("Debug"), qApp->tr(msg), QMessageBox::Cancel); qWarning() << qApp->tr("Некоторый текст").toUtf(); выделенный tr() лишний. Попробуй проанализировать, как произойдут преобразования кодировок
qWarning() << qApp->tr("Некоторый текст").toLocal8Bit; |
|
|
Гость_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
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
не работает. 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
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
maint, твой вариант аналогичен:
т.е. тому что у него. |
|
|
maint |
14.7.2010, 9:52
Сообщение
#9
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
maint, твой вариант аналогичен:
т.е. тому что у него. да, забыл, виноват 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 кодируется двумя. Всем спасибо |
|
|
Текстовая версия | Сейчас: 22.12.2024, 21:57 |