IscanderChe
Feb. 20, 2019, 2:10 p.m.

Подготовка кода к переводу

перевод

Добрый день.

В коде класса есть вызов диалога QFileDialog::getSaveFileName. И вот для заголовка диалога "Save report" почему-то не могу поставить tr(), компилятор выдаёт "ошибка: 'tr' was not declared in this scope". Что нужно подключить, чтобы ошибки не было?

  1. datamanager.h
  2. =============
  3.  
  4. #ifndef DATAMANAGER_H
  5. #define DATAMANAGER_H
  6.  
  7. #include <QTextStream>
  8. #include <QStandardItemModel>
  9. #include <QStandardItem>
  10. #include <QFileDialog>
  11. #include <QObject>
  12.  
  13. class DataManager
  14. {
  15. public:
  16. DataManager();
  17. ...
  18.  
  19. datamanager.cpp
  20. ===============
  21. #include "datamanager.h"
  22. ...
  23.  
  24. QString nameFile;
  25. QString strFilter;
  26. nameFile = QFileDialog::getSaveFileName(0,
  27. "Save report",
  28. nameFile,
  29. "*.dat",
  30. &strFilter);
2

Do you like it? Share on social networks!

4
Evgenii Legotckoi
  • Feb. 20, 2019, 2:44 p.m.
  • The answer was marked as a solution.

Добрый день

tr() работает только в классах, наследованных от QObject, либо от классов, которые имеют в себе макрос использования функционала перевода - Q_DECLARE_TR_FUNCTIONS

В общем так дописать нужно

  1. #include <QCoreApplication>
  2.  
  3.  
  4. class DataManager
  5. {
  6. Q_DECLARE_TR_FUNCTIONS(DataManager)
  7.  
    IscanderChe
    • Feb. 20, 2019, 3:32 p.m.

    Сработало. Спасибо!

      IscanderChe
      • Feb. 20, 2019, 3:45 p.m.

      Вот так тоже сработало:

      1. datamanager.cpp
      2. ===============
      3. #include "datamanager.h"
      4. #include <QObject>
      5. ...
      6.  
      7. ... QObject::tr("Save report") ...
        Evgenii Legotckoi
        • Feb. 20, 2019, 4:34 p.m.
        • (edited)

        Да, так тоже можно.

        Единственный момент в том, что lupdate не всегда понимает, к какому контексту это дело относится, и может запихать в левый контекст. В небольшом проекте это не критично, а у нас, например, это на ревью обратно заворачивают, чтобы поменяли на Q_DECLARE_TR_FUNCTIONS .

        Поскольку программисты только консультируют переводчиков в плане контекста спорных предложений для перевода. И нет программиста, который бы отвечал ещё и за переводы, этим именно переводчики занимаются.

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • IscanderChe
            April 12, 2025, 5:12 p.m.
            Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
          • AK
            April 1, 2025, 11:41 a.m.
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…