Russian Qt Forum
Ноябрь 10, 2024, 23:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Translator не переводит один исходник  (Прочитано 11785 раз)
GraninDm
Гость
« : Ноябрь 16, 2015, 11:03 »

Добрый день!

Проблема в том, что не переводится один cpp.
Файл переводов подгружается.
В linguist перевод виден и переведен.

Код:
BaseEditDocWidget *w = new BaseEditDocWidget(); // Переводится
FPEditor *ew = new FPEditor(); // Не переводится

w->setParent(this,Qt::Window);
ew->loadDocumentById(rId);
w->setEditorWidget(ew);
w->show();

Куда рыть?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 16, 2015, 11:23 »

Переводятся ведь строки в tr() а так вообще не понятно, что у вас там внутри и переведено ли вообще для FPEditor
Записан

GraninDm
Гость
« Ответ #2 : Ноябрь 16, 2015, 11:29 »

Все там в tr.
Я же написал: "В linguist перевод виден и переведен."

Цитировать
void FPEditor::setupWidgets()
{
    QGridLayout *lay = new QGridLayout();
    QLabel *label = new QLabel(tr("Number"));
Записан
Bepec
Гость
« Ответ #3 : Ноябрь 16, 2015, 11:47 »

Всё там правильно написано, ошибок нет, я идеален, зачем вам код, сами догадайтесь обо всём, наверно это Qt багает!!!

PS сарказм
Записан
GraninDm
Гость
« Ответ #4 : Ноябрь 16, 2015, 12:14 »

Какой код еще нужен? Я выложу...

Сейчас удалил весь перевод.
Запустил lupdate
Перевел две строки из FPEditor
Запустил lrelease
Файл qm создался
Эти две строки там есть.
translator.load возвращает true.
Записан
GraninDm
Гость
« Ответ #5 : Ноябрь 16, 2015, 13:06 »

Код:
QLabel *label = new QLabel(QApplication::translate("test", "Number"));
Вот так заработало.

Код:
QLabel *label = new QLabel(QObject::tr("Number"));
И так тоже.

Код:
QLabel *label = new QLabel(tr("Number"));
А так нет.

Наследование такое
FPEditor::FPEditor(QWidget *parent) : BaseDocEditor(parent)
BaseDocEditor::BaseDocEditor(QWidget *parent) : QWidget(parent)

А так подозреваю, что это происходит из-за того что FPEditor не унаследован напрямую от класса qt.
Что в этом случае делать?

Дополню...
Даже так работает
Код:
QLabel *label = new QLabel(BaseDocEditor::tr("Number"));
« Последнее редактирование: Ноябрь 16, 2015, 14:13 от GraninDm » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Ноябрь 16, 2015, 14:30 »

А как выглядит FPEditor.h?
Записан

GraninDm
Гость
« Ответ #7 : Ноябрь 16, 2015, 14:47 »

Я понял в чем была моя проблема.

В объявлении FPEditor не было Q_OBJECT
Из-за этого this->metaObject()->className() не устанавливался.

Вывод в конструкторах без Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() BaseDocEditor
Соответственно транслятор искал другой контекст

А с Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() FPEditor

Все заработало.
Записан
Bepec
Гость
« Ответ #8 : Ноябрь 16, 2015, 14:53 »

А ответ на ваш вопрос -
Цитировать
"Какой код еще нужен?"
ВЕСЬ! Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Ноябрь 16, 2015, 15:39 »

Я понял в чем была моя проблема.

В объявлении FPEditor не было Q_OBJECT
Из-за этого this->metaObject()->className() не устанавливался.

Вывод в конструкторах без Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() BaseDocEditor
Соответственно транслятор искал другой контекст

А с Q_OBJECT
BaseDocEditor::BaseDocEditor(QWidget*) this->metaObject()->className() BaseDocEditor
FPEditor::FPEditor(QWidget*) this->metaObject()->className() FPEditor

Все заработало.

А я вот и засомневался влияет ли наличие Q_OBJECT кроме сигналов/слотов на на трансляцию или нет Улыбающийся
Записан

GraninDm
Гость
« Ответ #10 : Ноябрь 16, 2015, 16:41 »

А так понял Q_OBJECT влияет на metaObject.
А QTranslator берет контекст перевода из metaObject()->className().
« Последнее редактирование: Ноябрь 16, 2015, 16:43 от GraninDm » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Ноябрь 18, 2015, 07:24 »

GraninDm, теоретически, ты это должен был заметить в Лингвисте, он же там по контекстам группирует. Теоретически - потому что я твою ситуацию не проверял.
Записан

Юра.
GraninDm
Гость
« Ответ #12 : Ноябрь 18, 2015, 12:59 »

В Лингвисте контекст был правильный.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.