Qtの翻訳システムを使用してenum
(つまりQMetaEnum
経由)の文字列表現を翻訳することはできますか?私は、私は必要だと思う何文字列値の変換文字列Qt
があれば、ファイルがLUPDATEによって処理されている場合にのみ、または動作を変更することにより、翻訳のために、いずれかのいくつかのQT_TR_NOOP()のコードを放出することにより、列挙型の文字列をピックアップしてlupdate
を取得するいくつかの方法のためでありますlupdate
/moc
です。
たとえば、私のアプリケーションは、ダイアログボックスを介してユーザーに「設定」オプションを提示します。すべての設定はQ_PROPERTY
と定義されています。 enum
を使用するオプションはコンボボックスとして表示され、コンボボックスのテキストオプションには表示されるテキストとしてQMetaEnum::key()
が使用されます。以下は、ポイントを取得するためのいくつかの擬似コードです。
のようなウィジェットが定義されているいくつかのenum
性質を持っています:コンボウィジェットの作成は個別の設定マネージャによって行われ、このような何か進む
class SomeWidget : public QWidget
{
Q_OBJECT
Q_ENUMS(Configuration);
enum Configuration
{
Config_Blue = 0,
Config_Green,
Config_Invisible,
Config_Backwards
};
Q_PROPERTY(Configuration READ Configuration WRITE SetConfiguration);
};
:
QWidget* SettingsItem::CreateWidget()
{
const QMetaObject* pMetaObj = this->m_pWidget->metaObject();
const QMetaProperty& rcProp = pMetaObj->property(this->m_iProp);
QMetaEnum cEnum = rcProp.enumerator();
if(cEnum.isValid())
{
QComboBox* pRetWidget = new QComboBox;
for(int i = 0; i < cEnum.keyCount(); ++i)
{
int iVal = cEnum.value(i);
QString strKey = cEnum.key(i); // Translate here?
pRetWidget->addItem(strKey, iVal);
}
}
...
return pRetWidget;
}
設定でコンボボックスをダイアログで "Config_Blue"、 "Config_Green"などが表示されます。現在の言語が何であれ、 "Blue"、 "Green"などと言うだけです。
残りのコードでは、Qtの翻訳システムと、実際にはうまく動作するlinguist
ユーティリティを使用しています。文字列リテラルとtr()
を手動でコードに追加することなく、enum
のこのタイプの翻訳を有効にできることを期待していました。基本的に、翻訳者が必要とする情報はすべてコード内に既にあります。これらの列挙型の値を翻訳可能なものとして識別できるようにするには、linguist
が必要です。コンボボックスに値が入力されると、tr()
が呼び出されます。私は、私は必要だと思う何
があれば、ファイルがLUPDATEによって処理されている場合にのみ、または動作を変更することにより、翻訳のために、いずれかのいくつかのQT_TR_NOOP()のコードを放出することにより、列挙型の文字列をピックアップしてlupdate
を取得するいくつかの方法のためでありますlupdate
/moc
です。
マクロが動作する可能性はありますが、可能ではない可能性があります。多分Qtコードを変更する必要がありますか?
私は最初、返信を書いたかったが、私自身は以下からそれを読んだ:http://kalebpederson.com/index.php/2010/07/qmetaenum-magic-serializing-c-enums – AlexanderVX
これはちょうどQMetaEnumを使用してキー値を文字列として取得します。私はこれが私がすでにやっていることだと信じています。私が本当に必要とするのは、enum文字列をlupdateでピックアップして翻訳できるようにすることです。多分私はこれをより明確にするために私の質問を修正するでしょう。 –