crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Как вшить *.qm файлы в исполняемый файл?
good_game
  опции профиля:
сообщение 15.2.2012, 10:27
Сообщение #1


Студент
*

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

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




Репутация:   0  


Доброе время суток, уважаемые форумчане. Ситуация вот какая. Написано приложение с переводимым интерфейсом. Сгенерированы файлы *.ts, затем из них созданы *.qm, кинуты в специальную директорию. Прога из этой директории их читает и переводит интерфейс как надо. В интерфейсе создаётся меню для смены языка приложения прямо во время выполнения программы. Вот код функции, которая создаёт меню смены языков:
void MainWindow::create_language_menu()
{
    // Создаём меню языков
    QActionGroup *languageActionGroup = new QActionGroup(this);
    connect(languageActionGroup, SIGNAL(triggered(QAction *)), this, SLOT(switchLanguage(QAction *)));

    QDir dir(qmPath);
    QStringList fileNames = dir.entryList( QStringList("*.qm"));

    QString sellocale = "en";

    for (int i=0; i < fileNames.size(); i++)
    {
        QString locale = fileNames[i];
        locale.remove(0, locale.indexOf('_')+1);
        locale.truncate(locale.lastIndexOf('.'));

        QTranslator translator;
        translator.load(fileNames[i], qmPath);
        QString language = translator.translate("MainWindow", "English");

        QAction *action = new QAction(tr("%1").arg(language), this);
        action->setCheckable(true);
        action->setData(locale);        

        languageActionGroup->addAction(action);

        if (locale == sellocale)
        {
            switchLanguage(action);
            action->setChecked(true);
        }
    }
}

И всё работает замечательно. Задача в том, чтобы эти файлы *.qm лежали не в какой-то директории, а были вшиты в исполняемый файл (в данный момент программа их ищет в директории qmPath). Как сделать, чтобы программа их искала в своих ресурсах?
У самого пока это сделать не получается. Пробовал добавить в проект. В Креаторе они добавляются как "Другие файлы", и как потом их перебирать, не имею понятия.
Пробовал сделать qmPath = ":/", программа не видит файлов. Как сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.2.2012, 12:01
Сообщение #2


Старейший участник
****

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

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




Репутация:   12  


Добавь этот файл в ресурсы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
good_game
  опции профиля:
сообщение 15.2.2012, 12:35
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(wiz29 @ 15.2.2012, 12:01) *
Добавь этот файл в ресурсы.


Добавил. А дальше не знаю как с ними обращаться. Вернее обращаться так, чтобы код не зависел ни от их количества, ни от их имён. Обращаться с ними так, как будто они в какой-то директории рядом лежат.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.2.2012, 14:07
Сообщение #4


Старейший участник
****

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

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




Репутация:   12  


Дальше как любым файлом из ресурсов. Путь к файлу через ":путь к ресурсу".
что то вроде
pTranslator->load(":/Resources/qt_ru.qm")
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.11.2024, 10:27