最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

背景

多個子項目,分別翻譯生成的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如何實現(xiàn)一鍵加載qm文件的文章就介紹到這了,更多相關(guān)Qt加載qm文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • gdb調(diào)試的簡單操作總結(jié)

    gdb調(diào)試的簡單操作總結(jié)

    gdb是一個命令行下的、功能強大的調(diào)試器,這篇文章主要為大家詳細介紹了gdb?調(diào)試的一些簡單操作,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • C語言實現(xiàn)簡單猜拳小游戲

    C語言實現(xiàn)簡單猜拳小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單猜拳小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C語言高級教程之變長數(shù)組詳解

    C語言高級教程之變長數(shù)組詳解

    這篇文章主要介紹了C語言中變長數(shù)組的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C++中的幾個特殊符號說明

    C++中的幾個特殊符號說明

    這篇文章主要介紹了C++中的幾個特殊符號說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • linux 匿名管道實例詳解

    linux 匿名管道實例詳解

    這篇文章主要介紹了linux 匿名管道實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解C++中的指針、數(shù)組指針與函數(shù)指針

    詳解C++中的指針、數(shù)組指針與函數(shù)指針

    本文從初學者的角度,深入淺出地講解C++中的指針、數(shù)組指針與函數(shù)指針,對最?;煜囊脗鬟f、值傳遞和指針傳遞做了區(qū)處,需要的朋友可以參考下
    2015-07-07
  • C++設(shè)計模式之狀態(tài)模式

    C++設(shè)計模式之狀態(tài)模式

    這篇文章主要介紹了C++設(shè)計模式之狀態(tài)模式,本文講解了什么是狀態(tài)模式、狀態(tài)模式的使用場合、狀態(tài)模式的實現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語言實現(xiàn)查詢自動售貨機中的商品價格【實例分享】

    C語言實現(xiàn)查詢自動售貨機中的商品價格【實例分享】

    本文主要介紹了C語言實現(xiàn)查詢自動售貨機中的商品價格的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • OpenCV外接USB攝像頭的方法

    OpenCV外接USB攝像頭的方法

    這篇文章主要為大家詳細介紹了OpenCV外接USB攝像頭的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C++實踐IP地址類項目參考

    C++實踐IP地址類項目參考

    今天小編就為大家分享一篇關(guān)于C++實踐IP地址類項目參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

临清市| 洮南市| 遂溪县| 清原| 民丰县| 利津县| 白朗县| 德保县| 台安县| 株洲县| 清水河县| 沙雅县| 扶沟县| 江山市| 周宁县| 东港市| 车险| 睢宁县| 建阳市| 象州县| 华容县| 钟祥市| 壤塘县| 饶阳县| 海丰县| 垦利县| 志丹县| 旺苍县| 莒南县| 揭阳市| 邓州市| 广州市| 皮山县| 寿光市| 浮山县| 长葛市| 玛曲县| 绿春县| 阳高县| 都匀市| 东阿县|