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

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

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Строка в DLL

Автор: kalifriki 6.2.2010, 22:42

Доброго времени суток. Проблема такая:
Я создал динамическую библиотеку, с единственной функцией, которая возвращает QString.
В своей программе подключаю эту библиотеку и вызываю этот метод. Если строка в библиотека набрана английскими символами все нормально, но если в строке есть русские символы - начинаются проблемы, при вызове этой функции получаю кракозябры. Как это можно исправить? И получать из библиотеки нормальные русские символы?
Заранее спасибо.

Автор: Litkevich Yuriy 6.2.2010, 23:15

Цитата(kalifriki @ 7.2.2010, 1:42) *
но если в строке есть русские символы - начинаются проблемы, при вызове этой функции получаю кракозябры. Как это можно исправить? И получать из библиотеки нормальные русские символы?
а как это (наличие строки не в Lain1) реализовать без библиотеки, а в своей программе знаешь?

Автор: kalifriki 6.2.2010, 23:22

Цитата(Litkevich Yuriy @ 6.2.2010, 23:15) *
Цитата(kalifriki @ 7.2.2010, 1:42) *
но если в строке есть русские символы - начинаются проблемы, при вызове этой функции получаю кракозябры. Как это можно исправить? И получать из библиотеки нормальные русские символы?
а как это (наличие строки не в Lain1) реализовать без библиотеки, а в своей программе знаешь?

Не совсем понял :)
У меня строка должна быть обязательно в библиотеке (там помимо нее, конечно есть и функции, но сейчас дело их не касается). Как её получить в основной программе и вывести, например, на экран в нормальном виде, не кракозябрском.

Автор: Litkevich Yuriy 6.2.2010, 23:46

kalifriki, что-нибудь слышал про функции:
tr()
trUtf8()
codecFoTr()
?

Автор: kalifriki 6.2.2010, 23:55

Цитата(Litkevich Yuriy @ 6.2.2010, 23:46) *
kalifriki, что-нибудь слышал про функции:
tr()
trUtf8()
codecFoTr()
?

Слышал, погуглил, не понял как это может мне помочь.
CODE

lib.setFileName(fileName);
lib.load();
typedef QString (*Name) ();
if (name) {
QString temp = name();
setWindowTitle(temp);
}

В заголовке получаю кракозябры.

Автор: Rocky 6.2.2010, 23:58

QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));


как пример

Автор: Litkevich Yuriy 7.2.2010, 0:14

Цитата(kalifriki @ 7.2.2010, 2:55) *
Слышал, погуглил, не понял как это может мне помочь.
самый простой способ, но и самый плохой:
где-то в коде строка с не латиницей:
QString s = tr("Привет мир");
, предположим, что кодировка этого файла - CP-1251 (Windows-1251)
тогда в функции main:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

Автор: kalifriki 7.2.2010, 1:33

Цитата(Litkevich Yuriy @ 7.2.2010, 0:14) *
Цитата(kalifriki @ 7.2.2010, 2:55) *
Слышал, погуглил, не понял как это может мне помочь.
самый простой способ, но и самый плохой:
где-то в коде строка с не латиницей:
QString s = tr("Привет мир");
, предположим, что кодировка этого файла - CP-1251 (Windows-1251)
тогда в функции main:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));


Большое спасибо. С проблемой разобрался :)

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