Russian Qt Forum
Ноябрь 23, 2024, 11:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: статическая библиотека и транслятор. Не работает!  (Прочитано 15146 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Июнь 15, 2009, 14:54 »

Доброго времени суток...

Я решил тут собрать приложение с использованием статической библитеки. В этой библиотеке я некоторые строки писал через tr...

Сделал всё как надо, т.е:

1. Создал в library.pro
Код:
...
RESOURCES += resources.qrc
TRANSLATIONS += translations/qserialdevice_ru.ts
...

2. Создал сам файл resources.qrc
Код:
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/translations">
<file>translations/qserialdevice_ru_RU.qm</file>
</qresource>
</RCC>

3. сгенерировал файлы *.ts и *.qm
4. собрал саму эту библиотеку
Цитировать
    qmake library.pro
    make
5. появился файл library.a  .. вроде тут все понятно...

теперь, подключаю её в мое приложение:
1. В файл проекта app.pro как надо подключаю её и т.п.
2. В main.cpp транслятор гружу так:
Код:
....
QString locale = QLocale::system().name();
qDebug() << locale;

QTranslator translator;
if (!translator.load( ":/translations/qserialdevice_"+locale+".qm" ))
qDebug() << "Load translator fail";
app.installTranslator(&translator);
....
3. Собираю приложение - ошибок нет..
4. Запускаю приложение - НО в консоли моя дебажка выводит :  "Load translator fail" т.е. функция возвращает false!

Я уже пробовал и так и сяк: и менял *_ru.qm, и *_ru_RU.qm и в файле *.qrc убирал префиксы и т.п. - НО грузить из ресурсов не хочет!

Поэтому:

1. Как все-таки это сделать?
2. Как узнать, прицепились ли ресурсы к библиотеке при её компиляции?

ЗЫ: QT 4.1.1  Улыбающийся

Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Июнь 15, 2009, 15:25 »

хм... пробовал комментировать в файле Library.pro при сборке библиотеки :
Код:
#RESOURCES		+= resources.qrc
#TRANSLATIONS += translations/qserialdevice_ru.ts

и потом убирать комментарий и опять собирать библиотеку  - и получается, что размер моей библиотеки что так, что эдак получается одинаковый.. т.е получается что ресурсы не вкомпиливаются в неё!! Грустный
Записан

ArchLinux x86_64 / Win10 64 bit
ритт
Гость
« Ответ #2 : Июнь 15, 2009, 15:28 »

бгг...всё вкомпиливается - просто надо пересобирать начисто...
а по теме:

Цитировать
-    if (!translator.load( ":/translations/qserialdevice_"+locale+".qm" ))
+    if (!translator.load( ":/translations/translations/qserialdevice_"+locale+".qm" ))
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июнь 15, 2009, 15:43 »

НЕ работает!

Цитировать
бгг...всё вкомпиливается - просто надо пересобирать начисто...
Ёпт! Я так и делаю
« Последнее редактирование: Июнь 15, 2009, 15:52 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
ритт
Гость
« Ответ #4 : Июнь 15, 2009, 17:24 »

Q_INIT_RESOURCE ?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Июнь 15, 2009, 18:27 »

Цитировать
Q_INIT_RESOURCE ?

я не понял как этот макрос применить в моем случае... т.к. нужно :
1. вызывать эту ф-ю (макрос или чо там) из main
2. в качестве параметра указывать имя файла *.qrc - а в моем случае это файл resources.qrc который находится в директории БИБЛИОТЕКИ а не самого приложения...

и если я добавляю в приложение ( в main.cpp) :
Код:
...
    Q_INIT_RESOURCE(resources);
...
то при компиляции вываливаются сообщения:
Цитировать
[den@myhost default]$ make
g++ -c -pipe -march=x86-64 -mtune=generic -O2 -pipe -D_REENTRANT -Wall -W -DQT_NO_DEBUG -DQT_CORE_LIB -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include -I../../src -Ibuild/moc -o build/obj/main.o main.cpp
g++ -Wl,-rpath,/usr/lib -o release/default build/obj/main.o    -L../../src/release -L/usr/lib -lqserialdevice -lQtCore -lpthread
build/obj/main.o: In function `main':
main.cpp:(.text+0x19): undefined reference to `qInitResources_resources()'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [release/default] Ошибка 1
[den@myhost default]$

Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Июнь 15, 2009, 19:00 »

Даже не работает приложение , которое я прицепил в аттаче!! Грустный Что я делаю не так?
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Июнь 15, 2009, 21:10 »

Блина, работает только если принудительно указывать имя файла перевода!
Код:
...
QString str = QDir::currentPath() + "/translations/hello_Russian.qm";
qDebug() << str;
if (!translator->load(str))
...

Иначе никак не хочет! Как скомпилировать приложение чтобы ресурсы с исполняемым файлом объединились?  Я уже злоййй!!!  Бьюсь об стену - и она не выдердживает!! Грустный
Записан

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #8 : Июнь 15, 2009, 21:42 »

Иначе никак не хочет! Как скомпилировать приложение чтобы ресурсы с исполняемым файлом объединились?  Я уже злоййй!!!  Бьюсь об стену - и она не выдердживает!! Грустный
Спокойней, удары об стену никому на пользу не идут.  Улыбающийся

В main.cpp добавляй:
Код
C++ (Qt)
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE( resources );
       ...
 

В hello.pro:
CONFIG          = release warn_on qt console
меняем на это
CONFIG         += release warn_on qt console

и все будет Ok.  Подмигивающий
« Последнее редактирование: Июнь 15, 2009, 22:02 от BRE » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Июнь 16, 2009, 07:53 »

2 BRE,

Спасибо, никогда бы не додумался о правке *.pro Улыбающийся

Но теперь вместо слова : "Привет" выводится (под Windows XP) :
Цитировать
....
C:\Temp\hello>release\hello.exe
"ru_RU"
"╧ЁштхЄ"
^C
C:\Temp\hello>
....

Эту крякозяблу как победить? Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #10 : Июнь 16, 2009, 09:17 »

пробовал в main.cpp писать:
Код:
...
Q_INIT_RESOURCE(resources);
        QCoreApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1250"));
...

и вместо Windows-1250 писал и Windows-1251 и UTF-8 - но ничего не изменилось.. как выводился крякомусор так и выводится Грустный
Записан

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #11 : Июнь 16, 2009, 09:22 »

и вместо Windows-1250 писал и Windows-1251 и UTF-8 - но ничего не изменилось.. как выводился крякомусор так и выводится Грустный
По венде я не советчик, но на сколько я помню, у нее в консоли 866 кодировка.  Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Июнь 16, 2009, 09:55 »

Ёптель! Улыбающийся

Наконец то заработало!

У меня заработало, если написать так:
Код:
...
QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866"));
...

!!!

Записан

ArchLinux x86_64 / Win10 64 bit
spirit
Гость
« Ответ #13 : Июнь 16, 2009, 12:03 »

а CP-866 разве не пашет?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #14 : Июнь 16, 2009, 12:42 »

Дык в ассистенте (у меня) написано только это:
Цитировать
The supported encodings are:
Apple Roman
Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030-0
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 to 10
ISO 8859-13 to 16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
JIS X 0201
JIS X 0208
KOI8-R
KOI8-U
MuleLao-1
ROMAN8
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
Windows-1250 to 1258
WINSAMI2

и тут нету cp866 Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 22.