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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Работа оператора tr  (Прочитано 10554 раз)
ruzik
Гость
« : Март 04, 2011, 20:47 »

Здравствуйте, возникла такая проблема:
У меня есть класс, который располагается в файлах h+cpp
И в cpp в реализации одной функции есть такая строчка
if(tableWidget->item(a,3)->text()==tr("Yes"))
И у меня не хочет определять оператор tr, а что подключить я не знаю
По смыслу надо QtCore, но не помогает пробовал и QtGui, хотя он тут вообще не при чем
Хотя в обычном проекте все работает нормально, смотрел в дизайнере что там подключается, ничего интересного не нашел, в pro файле то же ничего
Я знаю что дело макросе Q_OBJECT, но если его поставить то придется наследовать мой класс от QOBject, что возможно, но не желательно, так как я не пользуюсь не одной из функций QOBject, и КПД упадет, можно ли как-то сделать это избегая наследования
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Март 04, 2011, 21:03 »

Код
C++ (Qt)
if(tableWidget->item(a,3)->text()==QString(tr("Yes")))
 
Записан

ArchLinux x86_64 / Win10 64 bit
Fat-Zer
Гость
« Ответ #2 : Март 04, 2011, 21:32 »

tr() - static член QObject
Код
C++ (Qt)
#include <QObject>
//...
if(tableWidget->item(a,3)->text()==QObject::tr("Yes"))
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 04, 2011, 21:40 »

>>оператор tr
это не оператор, а функция.

Если ты её используешь не внутри класса, который унаследован от QObject, то поступать нужно, как сказал Fat-Zer
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Март 04, 2011, 21:44 »

Решение Fat-Zer работать небудет.

Юзай QT_TR_NOOP, QT_TRANSLATE_NOOP, qApp->translate(...)
« Последнее редактирование: Март 04, 2011, 21:49 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Fat-Zer
Гость
« Ответ #5 : Март 04, 2011, 21:58 »

Решение Fat-Zer работать небудет.
можно узнать почему?
Записан
Sancho_s_rancho
Гость
« Ответ #6 : Март 04, 2011, 22:16 »

Решение Fat-Zer работать небудет.
можно узнать почему?
Насколько я помню классы без макроса Q_OBJECT опускаются и вызов статического метода тут не поможет.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Март 04, 2011, 23:20 »

можно узнать почему?

А подумай, каким образом будет осуществлен перевод? Посомтри для интереса код tr. Думаю после просомтра кода станет все понятно.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Fat-Zer
Гость
« Ответ #8 : Март 04, 2011, 23:48 »

А подумай, каким образом будет осуществлен перевод? Посомтри для интереса код tr. Думаю после просомтра кода станет все понятно.
чего-то я вообще определение tr() не наблюдаю Строит глазки
нашёл только это:
Код
C++ (Qt)
#ifdef QT_NO_TRANSLATION
   static QString tr(const char *sourceText, const char *, int)
       { return QString::fromLatin1(sourceText); }
   static QString tr(const char *sourceText, const char * = 0)
       { return QString::fromLatin1(sourceText); }
//.....
 
можете тыкнуть носом?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Март 04, 2011, 23:55 »

Посомтри в  qobjectdefs.h

QT_TR_FUNCTIONS
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Fat-Zer
Гость
« Ответ #10 : Март 05, 2011, 00:18 »

Код
C++ (Qt)
// qobjectdefs.h
   static inline QString tr(const char *s, const char *c, int n) \
       { return staticMetaObject.tr(s, c, n); } \
 
 
// qmetaobject.cpp
QString QMetaObject::tr(const char *s, const char *c, int n) const
{
   return QCoreApplication::translate(d.stringdata, s, c, QCoreApplication::CodecForTr, n);
}
 
// qcoreapplication.cpp
QString QCoreApplication::translate(const char *context, const char *sourceText,
                                   const char *disambiguation, Encoding encoding, int n)
 
 
в итоге вызов уходит туда же куда и qApp>translate(...), предложенный вами

ещё не очень понимаю, как работают эти макросы:
Код
C++ (Qt)
#define QT_TR_NOOP(x) (x)
#define QT_TR_NOOP_UTF8(x) (x)
#define QT_TRANSLATE_NOOP(scope, x) (x)
#define QT_TRANSLATE_NOOP_UTF8(scope, x) (x)
 
Записан
Fat-Zer
Гость
« Ответ #11 : Март 05, 2011, 00:26 »

ещё пример от троллей: http://doc.qt.nokia.com/4.7/linguist-hellotr.html
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Март 05, 2011, 01:18 »

http://doc.qt.nokia.com/4.7/internationalization.html

Цитировать
If the quoted text is not in a member function of a QObject subclass, use either the tr() function of an appropriate class, or the QCoreApplication::translate() function directly.

Цитировать
If you need to have translatable text completely outside a function, there are two macros to help: QT_TR_NOOP() and QT_TRANSLATE_NOOP(). They merely mark the text for extraction by the lupdate utility described below. The macros expand to just the text (without the context).
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Fat-Zer
Гость
« Ответ #13 : Март 05, 2011, 01:30 »

Цитировать
If the quoted text is not in a member function of a QObject subclass, use either the tr() function of an appropriate class, or the QCoreApplication::translate() function directly.
ну так мой метод работать ведь будет...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Март 05, 2011, 04:22 »

Да, состряпал пример простенький, действительно работает на 4.7.1. Приношу свои извенения, был неправ.


ЗЫ: Помниться когдато были проблемы с интернационализацей строк, которые находились "извне" QObject. И была именно описаная выше ситуация.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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