2

私は初心者レベルのプログラマーで、QT も初めてです。私は自分のプログラミングを 3 つの異なる言語にハードコーディングしているプロジェクトを持っています。私が取得した文字の代わりにロシア語をハードコーディングする方法を理解する上で問題があります???. 私のコードは FR.h SP.h German.h Russian.h に分解されます ->他の人がラテン語のコーデックを使用していることは理解していますが、ロシア語は英語ではありません.h 以下のファイルの外観の例-各単語が定義されています

    #ifndef EN_H
#define EN_H

#define TR_PRG_EN                 "Program"
#define TR_HELP_EN                "Help"
#define TR_PASSRW_EN              "Pass: R/W"
#define TR_ALLOWWRITE_EN          "Allow Write"
#define TR_SERIAL_EN              "Serial #"
#define TR_ALLOWREAD_EN           "Allow Read"
#define TR_PRO_EN                 "Product #"
#define TR_MEMSIZE_EN             "Mem. Size"
#define TR_TRIP_EN                "Trip #"
#define TR_RANGE_EN               "Range"
#define TR_DESCR_EN                "Description"
#define TR_LOGSET_EN              "Logger Settings"
#define TR_INTTEMP_EN             "Int. Temp (NTC)"
#define TR_HHIGH_EN               "HHigh(°F)"
#define TR_HIGH_EN                "High(°F)"
#define TR_LOW_EN                 "Low(°F)"
#define TR_LLOW_EN                "LLow(°F)"

ロシア語.h

    #ifndef RU_H
#define RU_H

#define TR_ENCODING               "utf-8"
#define TR_PRG_RU                 "??????????"
#define TR_HELP_RU                "Help"
#define TR_PASSRW_RU              "?????????"
#define TR_ALLOWWRITE_RU          "????????"
#define TR_SERIAL_RU              "???????? #"
#define TR_ALLOWREAD_RU           "????????? ??????"
#define TR_PRO_RU                 "??????? #"
#define TR_MEMSIZE_RU             "?????? ?????? "
#define TR_TRIP_RU                "??????? #"
#define TR_RANGE_RU               "????????"
#define TR_DESCR_RU                "????????"

次に、Clang.cpp(class,with.h file)ファイルを用意し、単語をQlist>(2次元配列)に入れます->以下は例です

const char *trOK[NB_LAN]={TR_OK_EN,TR_OK_FR,TR_OK_SP,TR_OK_IT,TR_OK_RU,TR_OK_GR,TR_OK_PR};
const char *trName[NB_LAN]={TR_NAME_EN,TR_NAME_FR,TR_NAME_SP,TR_NAME_IT,TR_NAME_RU,TR_NAME_GR,TR_NAME_PR};
const char *trDesc[NB_LAN]={TR_DESC_EN,TR_DESC_FR,TR_DESC_SP,TR_DESC_IT,TR_DESC_RU,TR_DESC_GR,TR_DESC_PR};
const char *trLL[NB_LAN]={TR_LL_EN,TR_LL_FR,TR_LL_SP,TR_LL_IT,TR_LL_RU,TR_LL_GR,TR_LL_PR};
const char *trL[NB_LAN]={TR_L_EN,TR_L_FR,TR_L_SP,TR_L_IT,TR_L_RU,TR_L_GR,TR_L_PR};
const char *trH[NB_LAN]={TR_H_EN,TR_H_FR,TR_H_SP,TR_H_IT,TR_H_RU,TR_H_GR,TR_H_PR};
const char *trHH[NB_LAN]={TR_HH_EN,TR_HH_FR,TR_HH_SP,TR_HH_IT,TR_HH_RU,TR_HH_GR,TR_HH_PR};
CLang::CLang()
{
    for(int i=0;i<NB_LAN;i++)
    {

        strTab << QStringList();
        strTab[i] << trPrg[i];            //m_tabLogger
        strTab[i] << trHelp[i];           //m_textBrowserHelp
        strTab[i] << trPassrw[i];         //label_13
        strTab[i] << trAllowWrite[i];     //m_checkBoxLoggerAllowWrite
        strTab[i] << trSerial[i];         //label_2
        strTab[i] << trAllowRead[i];      //m_checkBoxLoggerAllowRead
        strTab[i] << trPro[i];            //label_3
        strTab[i] << trMemSize[i];        //label_5
        strTab[i] << trTrip[i];           //label_6
        strTab[i] << trRange[i];          //m_labelRange
        strTab[i] << trDescr[i];           //label_7
        strTab[i] << trLogSet[i];         //m_groupBoxSettings

次に、メインウィンドウでそれを呼び出すので、ロシア語に文字を表示させるにはどうすればよいですか?別の質問は、複数のウィンドウ(GUI)でこれらの翻訳を異なるウィンドウ(GUI)で呼び出す方法です。

4

2 に答える 2

3

QTを含むほとんどすべてのフレームワークには翻訳を処理する機能があります:http: //doc.qt.digia.com/4.7-snapshot/linguist-programmers.html

ソースファイルでUTF8をハードコーディングする代わりにそれを使用する必要があります

そして、なぜ失敗するのかを答えるために、UTF8をcharに入れようとしています。動作しません。QStringなどを使用する必要があります。

于 2012-10-12T17:19:27.893 に答える
2

2つの解決策があります。より正しい方法は、次のように定義を記述することです。

1. const char* 定数を使用します。

const char* TR_HELP_RU = "Справка";

次に、main.cpp に以下を追加します。

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForCStrings(codec);

2.QString 定数を使用します。

 const QString TR_HELP_RU = QString("Справка");
于 2012-10-12T17:34:39.643 に答える