मैं एक क्यूटी परियोजना पर काम कर रहा हूं जिसमें QMainWindow
और एकाधिक क्यूटी और गैर-क्यूटी कक्षाएं शामिल हैं। उनमें से कई Q12trings का उपयोग tr()
के साथ करते हैं जिनका क्यूटी लिंगुइस्ट के साथ अनुवाद किया जाता है। भाषा परिवर्तन (QTranslator
लोड & इंस्टॉल/QTranslator
लोड & हटाएं) ऐप के मेनू में QActions द्वारा ट्रिगर किया गया है।मेनू के माध्यम से एप्लिकेशन में सभी विजेट्स को गतिशील रूप से रीट्रांसलेट कैसे करें?
मैं the official Qt documentation concerning dynamic translation पढ़ लिया है, और यह मूल रूप से निम्नलिखित अधिभार पता चलता है:
void MainWindow::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange) {
titleLabel->setText(tr("Document Title"));
... // all my tr() QStrings here
okPushButton->setText(tr("&OK"));
} else
QWidget::changeEvent(event);
}
समस्या का सामना करना पड़ रहा हूँ QStrings अनुवाद करने के लिए है कि कर रहे हैं कई (58 QMainWindow
अकेले में), और कई कार्यावधि में भर रहे हैं साथ ही, उपयोगकर्ता बातचीत के माध्यम से; ई। जी। नीचे myFunction(a,b)
एक QPushButton
के माध्यम से कहा जाता है:
void MainWindow::myFunction(MyClassA a, MyClassB b)
{
...
if(b.myCondition() == 0)
{
...
// below is the problem
myLabel->setText(myLabel->text() + QString("\n" + a->getName() + tr(" gagne ") + exp + tr(" points d'expérience")));
}
else
{
myLabel->setText(QString(tr("something else")));
}
...
}
तो मैं शायद ही देख सकते हैं कि मैं ऊपर changeEvent()
विधि में QString
के इस प्रकार शामिल कर सकते हैं। MainWindow
के बाहर की कक्षाओं के बारे में क्या, जिसमें अनुवाद करने के लिए QStrings भी हैं लेकिन QWidget
नहीं हैं (इसलिए changeEvent
ओवरलोड संभव नहीं है)?
मैंने पढ़ लिया है एक और तरीका है इस विधि का उपयोग करने के लिए है कि वहाँ एक यूआई फार्म के साथ,:
void MainWindow::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
{
ui.retranslateUi(this);
}
...
}
लेकिन यह है कि मैं सभी विजेट अपने प्रोजेक्ट है, जो मैं नहीं कर रहा हूँ में एक यूआई प्रपत्र का उपयोग कर रहा (शामिल कोड में बनाए गए हैं)। मैं एक यूआई के रूप में मेरी MainWindow निर्यात करने की कोशिश की, लेकिन जब मैं, मैं निम्न त्रुटि परियोजना में उत्पन्न हेडर को शामिल करने की कोशिश:
ui_fenetreprincipale.h:32: error: qmainwindowlayout.h: No such file or directory
सबसे अच्छा तरीका चयन करने के लिए किसी भी सुझाव के लिए अग्रिम द्वारा धन्यवाद मेरे आवेदन का अनुवाद करने के लिए।
यह वास्तव में क्यूटी डिजाइनर द्वारा उत्पन्न कोड को भी काम करता है। फ़ंक्शन का नाम अलग है ('retranslateUi') लेकिन यह वही काम करता है। –