I am using Qt linguist to translate my application (ui file and the rest of the code). Everything goes alright , the problem is all translations (in ui) work fine except an element added not from designer, here is my code to further explain :
tableWidget = new MyDropTableWidget(ui->verticalLayoutWidget_2);
if (tableWidget->columnCount() < 1)
tableWidget->setColumnCount(1);
tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("My non translated text"))); if (tableWidget->rowCount() < 21)
tableWidget->setRowCount(21);
...
ui->verticalLayout_2->addWidget(tableWidget);
...
all texts in ui are translated fine , only "My non translated text" was not. *.ts file are ok ("My non translated text" was detected and checked) , .qm file are well placed, I rebuild re lupdate re lrelease my application but in vain: when executing my application, all texts are translated expect "My non translated text" still in the source language.
Any help will be appreciated.
Edit:
in main file:
QTranslator Translator ;
qDebug()<<"Translator->load( lang)"<< Translator.load(":/"+language);
app.installTranslator( &Translator );
in mainwindow constructor:
ui->retranslateUi(this);
A non-translated text in Qt GUI is often caused by a bad order in your code.
It is impossible to answer precisely without reading your whole code. I suggest you to read the content of
Ui::retranslateUi()
method. You will see many code like:The
retranslateUi
metod is generated for you when compiling a *.ui file, but it is only a list of calls tosetText()
,setToolTip()
or another setXXX() methods on widgets you defined in the ui file. When asetText()
method is called (for example), the parameter must betr("my text")
, this tr() is replaced by the corresponding translation at the moment you call it. So you should check if when you initialize your table widget item, your Translator has correctly been installed.For example, if you create your item in the MainWindow constructor and if you have a main function like:
it will not work, because the translator is installed after MainWindow constructor call, so when the item is initialized, the translator is not set.
To find the issue in your case, I suggest you to put qDebug() calls at some point to check the order of the calls.