Russian Qt Forum
Июнь 15, 2024, 22:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: NSString в QString и обратно.  (Прочитано 6913 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Октябрь 04, 2010, 18:32 »

Как делать?
Хелпер функции для этого спрятаны где-то в недрах Qt и достать их проблематично.
Пока решил конвёртом в utf8 char*, но это какой-то кривой путь.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Октябрь 05, 2010, 13:01 »

Сам шучу, сам смеюсь... Родил 2 таких варианта:
Код:
QString qt_mac_NSStringToQString(const NSString *nsstr)
{
    NSRange range;
    range.location = 0;
    range.length = [nsstr length];
    QString result(range.length, QChar(0));
 
    unichar *chars = new unichar[range.location];
    [nsstr getCharacters:chars range:range];
    QString result = QString::fromUtf16(chars, range.length);
    delete  chars;
    return result;
}

Код:
QString qt_mac_NSStringToQString(const NSString *nsstr)
{
    NSRange range;
    range.location = 0;
    range.length = [nsstr length];
    QString result(range.length, QChar(0));
 
    unichar *chars = reinterpret_cast<unichar *>(result.data())
    [nsstr getCharacters:chars range:range];
    return result;
}
Есть ли явные косяки?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 05, 2010, 19:08 »

Не по существу конечно, но интересно: а где Вы напоролись на NSString что надо интенсивно конвертить? Я бы понял CFString или на Cocoa это уже пройденный этап?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Октябрь 05, 2010, 19:26 »

Судя по сорцам Qt NSString - обертка над CFString и спокойно в нее приводится reinterpret_cast'ом.
Мне надо было получить хуман-ридабл имя драйва и список драйвов в системе. Как это сделать на Cocoa я нашел (+читал книжку о ней). Также есть стремный код, использующий CoreServices для имени драйва. А вот как получить список дисков на CF я не нашел пока что.
Раз уж пошел оффтоп - CoreFoundation используется как база для cocoa? Не является ли он deprecated, как Carbon?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 05, 2010, 20:23 »

Судя по сорцам Qt NSString - обертка над CFString и спокойно в нее приводится reinterpret_cast'ом.
Мне надо было получить хуман-ридабл имя драйва и список драйвов в системе. Как это сделать на Cocoa я нашел (+читал книжку о ней). Также есть стремный код, использующий CoreServices для имени драйва. А вот как получить список дисков на CF я не нашел пока что.
Я бы делал по-народному через FSGetVolumeInfo (начиная с индекса = 1) пока он не вернет ошибку.
Раз уж пошел оффтоп - CoreFoundation используется как база для cocoa? Не является ли он deprecated, как Carbon?
Мое личное мнение - на Mac никогда не следует суетиться без крайней на то необходимости. Напр. сделали они FSRef вместо FSSpec - никуда не денешься, надо апдейтиться. Но если ф-ция работает и не указано deprecated - нечего искать приключений на свою "голову". Upgrade все равно неизбежен. невозможно угадать что Стиву придет в голову:
Цитировать
99% of users are full idiots
Тут папа забыл сказать: на Вындоуз этот % намного больше  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Октябрь 05, 2010, 22:07 »

Igors
А у вас есть что почитать по этому поводу?
А то гугл на тему volume'ов и Коре Фаундэйшн молчит как партизан.
Могли бы вы перечислить функции, которые нужны для получения имени диска и списка дисков?
И еще вопрос - нормально ли, что я использую statfs а не вызовы CF (для получения размера volume'а и типа файловой системы)?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Октябрь 06, 2010, 17:42 »

Igors
А у вас есть что почитать по этому поводу?
А то гугл на тему volume'ов и Коре Фаундэйшн молчит как партизан.
Могли бы вы перечислить функции, которые нужны для получения имени диска и списка дисков?
Ну тут надо "прильнуть к первоисточнику" http://developer.apple.com/library/mac/#documentation/Carbon/Reference/File_Manager/file_manager.pdf Список на стр 24. Apple имеет такой букварь по каждой теме. Проблема не отсутствие документации а ее чрезмерное обилие. И с ф-циями долговато разбираться куда там керосин заливать. Как чисто на Cocoa - не знаю

И еще вопрос - нормально ли, что я использую statfs а не вызовы CF (для получения размера volume'а и типа файловой системы)?
Сам не проверял, но, судя по др. вещам, POSIX они поддерживают цивильно - или работает как положено или сразу возвращает ошибку типа "not implemented"

Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Октябрь 06, 2010, 23:20 »

Чисто на cocoa-то я написал, что надо. Но потом задумался - а не слишком ли это высокоуровневое АПИ?
Поэтому и задался вопросом о CF.
А до statfs я дошел из тех соображений, что в доке к методам NSFileManager указано, что многие параметры беруться при помощи statfs.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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