crossplatform.ru

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


  Ответ в qWarning(QString) Не хочет работать с qApp->tr("someText")
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 10 сообщений [ в обратном порядке ]
qp Дата 14.7.2010, 10:17
  пофиксил. Всё оказалось вот так:

генерируем:

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 кодируется двумя.

Всем спасибо

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

т.е. тому что у него.
maint Дата 14.7.2010, 9:19
 
Цитата(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("Некоторый текст");

qp Дата 14.7.2010, 8: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


Есть ещё идеи?
Litkevich Yuriy Дата 13.7.2010, 16:31
 
Цитата(Гость_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() лишний. Попробуй проанализировать, как произойдут преобразования кодировок
maint Дата 13.7.2010, 15:00
 
Цитата(qp @ 13.7.2010, 19:53) *
Да, так действительно собирается без ошибок, но русский текст выводится квадратами.
варианты типа:

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

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

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

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

Неработают.
Интересно, но русский текст в окне диалога отображается корректно. текст генерируемых мессагов — квадратами.
igor_bogomolov Дата 13.7.2010, 13:14
  Компилятор тебе уже обо всем сообщил:
Цитата
no matching function for call to 'qWarning(QString)'
Т.е. qWarning не может в качестве параметра принимать QString.

Делай так:
qWarning() << qApp->tr("Некоторый текст");
qp Дата 13.7.2010, 12:46
  Организую вывод вообщений. есть функция обрабатывающая сообщения:

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);


Помогите разобраться почему так? Что можно сделать чтобы выводился нормально текст??
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.7.2025, 20:54