crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не понятный #define
RazrFalcon
  опции профиля:
сообщение 23.4.2011, 16:19
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Имеем:
#define QS(s) QString::fromUtf8(s.toCString(true))
#define TS(s) TagLib::String(s.toUtf8().constData(), TagLib::String::UTF8)
В коде используем так:
QTableWidgetItem* Item1 = new QTableWidgetItem();
Item1->setText(QS(tag->title()));
table->setItem(i, 0, Item1);
Все работает.
Вопрос вот в чем: что это вообще такое?

Сообщение отредактировал RazrFalcon - 23.4.2011, 16:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.4.2011, 16:40
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


какая-то химия с кодировками.
В каком формате (кодировке) хранятся данные в tag->title() ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 23.4.2011, 17:03
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


virtual String ?!
http://developer.kde.org/~wheeler/taglib/a...Lib_1_1Tag.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 24.4.2011, 9:29
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Эти дефайны - чуть переделанные из исходников TagLib. TagLib хранит строки как utf-16, Qt - как utf8.
tag->title() - перекрытый в потомках метод.

Порылся в исходниках. Такие дефайны, наверное, будут быстрее:
#define QS(s) QString::fromStdWString(s.toWString())
#define TS(s) TagLib::String(s.toStdWString())

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.4.2011, 10:05
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Дело немного не в том.
Мне интересно как, к примеру, написать самому такие же дефайны. Я даже не знаю на какую тему гуглить. Эти дефайны больше похожи на функцию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 24.4.2011, 15:44
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Если в классе часто нужно гонять строки из TagLib в Qt и обратно, логично использовать функции-конструкторы QString::fromStdWString(s.toWString()) и TagLib::String(s.toStdWString()). А так как они везде пишутся совершенно одинаково - заменяем их соответствующим коротким макросом-синонимом.

Сообщение отредактировал novichkov - 24.4.2011, 15:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.4.2011, 16:17
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(novichkov @ 24.4.2011, 12:29) *
utf-16, Qt - как utf8.
Видимо наоборот, т.к. Qt хранит в UTF-16!

Цитата(RazrFalcon @ 24.4.2011, 13:05) *
Мне интересно как, к примеру, написать самому такие же дефайны. Я даже не знаю на какую тему гуглить.
на тему
#define

#define MACRO(arg) some_code + arg

Аргумент макроса будет подставлен в выражение. Аргументов может быть много, их разделяют запятыми.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.4.2011, 16:41
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Теперь ясно. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 14:07