Russian Qt Forum

Qt => Общие вопросы => Тема начата: Авварон от Октябрь 04, 2010, 18:32



Название: NSString в QString и обратно.
Отправлено: Авварон от Октябрь 04, 2010, 18:32
Как делать?
Хелпер функции для этого спрятаны где-то в недрах Qt и достать их проблематично.
Пока решил конвёртом в utf8 char*, но это какой-то кривой путь.


Название: Re: NSString в QString и обратно.
Отправлено: Авварон от Октябрь 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;
}
Есть ли явные косяки?


Название: Re: NSString в QString и обратно.
Отправлено: Igors от Октябрь 05, 2010, 19:08
Не по существу конечно, но интересно: а где Вы напоролись на NSString что надо интенсивно конвертить? Я бы понял CFString или на Cocoa это уже пройденный этап?


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


Название: Re: NSString в QString и обратно.
Отправлено: Igors от Октябрь 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
Тут папа забыл сказать: на Вындоуз этот % намного больше  :)


Название: Re: NSString в QString и обратно.
Отправлено: Авварон от Октябрь 05, 2010, 22:07
Igors
А у вас есть что почитать по этому поводу?
А то гугл на тему volume'ов и Коре Фаундэйшн молчит как партизан.
Могли бы вы перечислить функции, которые нужны для получения имени диска и списка дисков?
И еще вопрос - нормально ли, что я использую statfs а не вызовы CF (для получения размера volume'а и типа файловой системы)?


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

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



Название: Re: NSString в QString и обратно.
Отправлено: Авварон от Октябрь 06, 2010, 23:20
Чисто на cocoa-то я написал, что надо. Но потом задумался - а не слишком ли это высокоуровневое АПИ?
Поэтому и задался вопросом о CF.
А до statfs я дошел из тех соображений, что в доке к методам NSFileManager указано, что многие параметры беруться при помощи statfs.