欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Qt如何實(shí)現(xiàn)一鍵加載qm文件

 更新時(shí)間:2024年04月20日 16:24:06   作者:雲(yún)煙  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)一鍵加載qm文件的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下

背景

多個(gè)子項(xiàng)目,分別翻譯生成的qm文件,如何一鍵加載?

.h

#include <QtCore/QObject>
#include <QtCore/QTranslator>
 
class LanguageSelector:public QObeject{
    Q_OBJECT
public:
    ~LanguageSelector() override = default;
    void setLanguage(const QString &l);
    QString getLanguage();
    void addLanguageFile(const QString &n);
    void removeLanguageFile(const QString &n);
    void reload();
    static LanguageSelector *getInstance();
signals:
    void languageChanged(const QString &l);
privite:
    LanguageSelector();
    static LanguageSelector* instance;
    static constexpr char CONFIGER_KEY[] = "system/language";
    QString baseDir;
    QList<QString> languageFiles;
    QList<QTranslator *> translations;
}

.cpp

#include "languageselector.h"
#include <QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QStringBuilder>
#include <QSettings>
 
LanguageSelector *LanguageSelector::instance = nullptr;
constexpr char LanguageSelector::CONFIGER_KEY[];
QString LanguageSelector::getLanguage()
{
    return QSettings::value( CONFIGER_KEY, defaultValue );
}
 
void LanguageSelector::setLanguage(const QString &language)
{
    QSettings qs;
    auto ov = QSettings::value( CONFIGER_KEY, defaultValue );
    qs::setValue( CONFIGER_KEY, language);
    if(ov != l){
        reload();
        emit languageChanged( language);
    }
}
 
LanguageSelector *LanguageSelector::getInstance()
{
    if(!instance){
        instance = new LanguageSelector;
    }
    return instance;
}
 
LanguageSelector::LanguageSelector()
    : baseDir( "i18n" ) {}
 
void LanguageSelector::addLanguageFile(const QString &name)
{
    if(name.isEmpty()){
        return;
    }
    languageFiles.append(name);
}
 
void LanguageSelector::removeLanguageFile(const QString &name)
{
    if(name.isEmpty()){
        return;
    }
    languageFiles.removeOne(name);
}
 
void LanguageSelector::reload()
{
    auto language = getLanguage();
    QString qmBase = QApplication::applicationDirPath() + "/" + baseDir;
    if(!qmBase.isEmpty() && !qmBase.endWith("/")){
        qmBase += "/";
    }
    if(!translations.isEmpty()){
        for(auto const t : translations){
            QCoreApplication::removeTranslator(t);
            t->deleteLater();
        }
    }
    for(auto const &qm :languageFiles){
    auto *t = new QTranslator(this);
    if(t->load(qmBase % qm % "_" % language ))
        translations.append(t);
        QCoreApplication::installTranslator(t);
    }else{
        qDebug() << "can not load lang file:" << qm << ", language" << language ;
    }
}

使用

main中,節(jié)目構(gòu)造之前添加:

      auto ls = LanguageSelector::getInstance();
            ls->addLangFile( "test" );
            ls->addLangFile( "local" );
            ls->addLangFile( "remote" );
            ls->reload();

到此這篇關(guān)于詳解Qt如何實(shí)現(xiàn)一鍵加載qm文件的文章就介紹到這了,更多相關(guān)Qt加載qm文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++編程中的虛函數(shù)

    詳解C++編程中的虛函數(shù)

    這篇文章主要介紹了詳解C++編程中的虛函數(shù),包括在什么情況下應(yīng)當(dāng)聲明虛函數(shù)的相關(guān)講解,需要的朋友可以參考下
    2015-09-09
  • C++實(shí)現(xiàn)簡(jiǎn)單版圖書(shū)管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單版圖書(shū)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單版圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++類(lèi)和對(duì)象之多態(tài)詳解

    C++類(lèi)和對(duì)象之多態(tài)詳解

    大家好,本篇文章主要講的是C++類(lèi)和對(duì)象之多態(tài)詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • c語(yǔ)言函數(shù)如何求兩個(gè)數(shù)的最大值

    c語(yǔ)言函數(shù)如何求兩個(gè)數(shù)的最大值

    這篇文章主要介紹了c語(yǔ)言函數(shù)如何求兩個(gè)數(shù)的最大值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語(yǔ)言預(yù)編譯#define(預(yù)處理)

    C語(yǔ)言預(yù)編譯#define(預(yù)處理)

    這篇文章主要介紹了C語(yǔ)言預(yù)編譯#define(預(yù)處理),#define 機(jī)制包括了一個(gè)機(jī)制,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏或者宏定義,下文更多的相關(guān)資料介紹需要的小伙伴可以參考一下
    2022-04-04
  • Seesion在C++服務(wù)端的使用方法

    Seesion在C++服務(wù)端的使用方法

    這篇文章主要介紹了Seesion在C++服務(wù)端是怎么使用的?本文給出了解決方案和實(shí)例代碼供大家參考,需要的朋友可以參考下
    2020-02-02
  • c++命名對(duì)象和匿名對(duì)象的解析

    c++命名對(duì)象和匿名對(duì)象的解析

    像按值傳遞的對(duì)象(函數(shù)入?yún)ⅲ瘮?shù)返回值)都是匿名對(duì)象,那匿名對(duì)象的特點(diǎn)是什么呢?下面通過(guò)實(shí)例代碼給大家解析c++命名對(duì)象和匿名對(duì)象的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • c語(yǔ)言socket多線程編程限制客戶端連接數(shù)

    c語(yǔ)言socket多線程編程限制客戶端連接數(shù)

    這篇文章主要介紹了c語(yǔ)言socket多線程編程,可以限制客戶端連接數(shù),大家參考使用吧
    2013-12-12
  • C++ RTTI與4種類(lèi)型轉(zhuǎn)換的深入理解

    C++ RTTI與4種類(lèi)型轉(zhuǎn)換的深入理解

    這篇文章主要給大家介紹了關(guān)于C++ RTTI與4種類(lèi)型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • OpenMP深入剖析reduction子句教程

    OpenMP深入剖析reduction子句教程

    這篇文章主要為大家介紹了OpenMP深入剖析reduction子句教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論