Название: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 11:44 Всем доброго времени суток!
Нашел на сайте интересный компонент: http://hardclub.donntu.edu.ua/projects/qt/components/datafile.htm для работы с ini файлами. Скачал и решил им воспользоваться. Но как оказалось он написан под Qt 3.3, из-за чего возникло много ошибок, при компиляции на Qt 4.4, большенство из них я победил, но осталось несколько ошибок, с которыми я ничего не могу поделать (на Qt програмирую недавно). Подскажите, ктонибудь переводил компонент TDataFile под Qt 4? Или может кто знает аналогичные компоненты, для работы с ini файлами. ЗЫ: вот ошибки, которые я так и не смог победить: Цитировать tdatafile.cpp(15) : error C2512: 'QMapIterator<Key,T>' : no appropriate default constructor available with [ Key=QString, T=type_ValueList ] tdatafile.cpp(120) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion) tdatafile.cpp(200) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'QMap<Key,T>::iterator' (or there is no acceptable conversion) with [ Key=QString, T=type_ValueList ] tdatafile.cpp(201) : error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'QMapIterator<Key,T>' (or there is no acceptable conversion) with [ Key=QString, T=type_ValueList ] tdatafile.cpp(207) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'QMapIterator<Key,T>' (or there is no acceptable conversion) with [ Key=QString, T=type_ValueList ] tdatafile.cpp(209) : warning C4172: returning address of local variable or temporary tdatafile.cpp(215) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'QMapIterator<Key,T>' (or there is no acceptable conversion) with [ Key=QString, T=type_ValueList ] Всем заранее спасибо! Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 11:55 QSettings не смотрели?
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:23 Смотрел, но нужна работа именно с ini файлами (или им подобными).
А по поводу ошибок, ничего подсказать не можете? Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 12:25 так QSettings позволяет использовать ini формат , нужно в конструктор передать правильный параметр
Цитировать QSettings::IniFormat | 1 | Store the settings in INI files. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: pastor от Октябрь 15, 2008, 12:27 Смотрел, но нужна работа именно с ini файлами (или им подобными). А по поводу ошибок, ничего подсказать не можете? QSettings может работать с ини-файлами, см. ассистант. По поводу ошибок, то неплохобы было показать проблемный код Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:36 2 pastor
Цитировать По поводу ошибок, то неплохобы было показать проблемный код Вот определение класса:Код: typedef QMap<QString, QString> type_ValueList; Реализация: Код: TDataFile::TDataFile(const QString &name) //тут чтото еще надо инициализировать, для Qt 4.4 Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:38 2 spirit
Цитировать так QSettings позволяет использовать ini формат , нужно в конструктор передать правильный параметр Тоесть и под виндой и под линуксом позволяет коректно читать ini файлы?Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 12:38 ага
Цитировать The QSettings class provides persistent platform-independent application settings. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:41 А ты случайно не в курсе, с Qt какиенибудь примеры работы с ini файлами (через QSettings) идут?
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 12:43 в курсе
см. тут Цитировать QTDIR/examples/tools/settingseditor/ Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:44 Большое спасибо, щас посмотрим.... ;D
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: pastor от Октябрь 15, 2008, 12:50 2 OS2:
По поводу ошибки, попробуй заинклудить QMap: Код: ... ЗЫЖ Дл портирования приложения с Qt3 на Qt4 есть утилита qt3to4. Также почитай про портирование в ассистанте Porting from Qt 3 to Qt 4 (http://doc.trolltech.com/4.4/porting4.html) Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:53 Все инклюды есть, из экономии места я их просто не привел:
Код: #include <qvariant.h> Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 12:54 а они в ашнике или в cpp?
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:58 Кто, они? ???
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 12:58 А, все, понял, в cpp!
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 12:59 инклуды где находятся, в файле с конструкцией
Цитировать typedef QMap<QString, QString> type_ValueList; т.е. ашнике или в cpp?Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 13:00 Утилитку qt3to4, тоже пробовал, но она не помогла, процентов 90 всех ошибок исправил сам, остались те, что я привел....
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 13:00 ну так значит надо поместить инклуд
Цитировать #include <QMap> там где typedef находится.Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 13:02 2 spirit
Извини! ;D В файле с конструкцией. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: pastor от Октябрь 15, 2008, 13:31 Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: lit-uriy от Октябрь 15, 2008, 13:52 ini-формат на юниксах подразумевает conf-файлы, а не ini-формат как в виндовозе.
Цитировать On Unix, NativeFormat and IniFormat mean the same thing, except that the file extension is different (.conf for NativeFormat, .ini for IniFormat). Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 14:18 2 lit-uriy
Чтото я не пойму, если у меня есть ini файл, например: test.ini (написанный СТРОГО в формате ini), то под виндой он будет читаться (при помощи QSettings), а под линухом нет? :o Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 14:20 будет он и под линуксом читаться.
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: pastor от Октябрь 15, 2008, 14:28 ini-формат на юниксах подразумевает conf-файлы, а не ini-формат как в виндовозе. Цитировать On Unix, NativeFormat and IniFormat mean the same thing, except that the file extension is different (.conf for NativeFormat, .ini for IniFormat). Попробую перевести фразу что ты привел: "В Unix, NativeFormat и IniFormat подразумевают одно и тоже, за исключением расширения (.conf для NativeFormat, .ini для IniFormat)" Так что все ок. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 14:30 Спасибо за разъяснение!
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: lit-uriy от Октябрь 15, 2008, 15:59 ini-формат на юниксах подразумевает conf-файлы, а не ini-формат как в виндовозе. Цитировать On Unix, NativeFormat and IniFormat mean the same thing, except that the file extension is different (.conf for NativeFormat, .ini for IniFormat). Попробую перевести фразу что ты привел: "В Unix, NativeFormat и IniFormat подразумевают одно и тоже, за исключением расширения (.conf для NativeFormat, .ini для IniFormat)" Так что все ок. В нем нет секций и стиль коментариев другой. или я что-то пропустил? Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 16:16 Товарищи, в догонку возник вопрос по чтению русской строки из ini файлов.
При попытке считать русскую строку, выводится всякая белиберда, как декодировать ее в читабельный русский? Единственный извесный мне метод, это QString::fromLocal8Bit, но он в качестве аргумента принимает const char*, а не QString, как быть? Как переконвертировать, полученный мной из ini, русский QString? Заранее спасибо! Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: spirit от Октябрь 15, 2008, 17:51 QTextCodec
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 20:03 Пробовал QTextCodec, но она конвертирует только часть русской строкию
исходная строка (QString s): Цитировать абвгдеёжзийклмнопрстуфхцчшщьъыюя1234567890АБВГДОПРСТУФХЦЧЕЩЬЪЫЮЯ получаем (char *str):Цитировать абв?деёжзийкл?ноп?с?уф?цчшщьъы?я1234567890АБВ?ДОП?С?УФ?ЦЧЕЩЬЪЫ?Я Вот код: Код: void Convert(QString s,char *str) ЗЫ: пробовал и windows-1251 и windows-1250, не помогает... :-[ Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: Пантер от Октябрь 15, 2008, 20:08 Интересно. Попробуй 1252.
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 15, 2008, 20:36 Ты гений ;D Спасибо! :D
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: Пантер от Октябрь 15, 2008, 20:41 В винде по умолчанию 1252, приходится вручную исправлять на 1251 в реестре.
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 26, 2008, 14:43 Просьба помочь, кто знает.
При переходе в Linux возникла еще одна проблема с конвертацией русских строк, считанных из ini файлов. В Линухе, вместо: Код: m_codec = QTextCodec::codecForName("windows-1252"); Код: m_codec = QTextCodec::codecForName("UTF-8"); Алгаритм приблизительно такой: Код: #ifdef Q_OS_WIN32 Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: xintrea от Октябрь 28, 2008, 00:09 1. В линухе у тебя какая кодировка локали?
2. Если кодировка локали UTF-8, то использовать fromLocal8Bit() походу неправильно. 3. А в какой кодировке у тебя сделан сам ini файл? Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 28, 2008, 01:20 Цитировать 1. В линухе у тебя какая кодировка локали? Точно не знаю, а как это посмотреть? ;)Код: 2. Если кодировка локали UTF-8, то использовать fromLocal8Bit() походу неправильно. Цитировать 3. А в какой кодировке у тебя сделан сам ini файл? Он создавался под виндой, походу - 1252. 8)Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: Пантер от Октябрь 28, 2008, 07:16 Гы. Если он в кодировке 1252, то и не нужно никаких ifdef. :) Код будет одинаковый под обеими осями.
Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 28, 2008, 11:22 2 panter_dsd
ini файл создан под виндой, но при просмотре его под Линухом русский шрифт не читабилен (даже если просто смотреть его едитом). Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: Пантер от Октябрь 28, 2008, 12:19 Что у тебя показывает команда locale?
Походу у тебя просто локаль не utf8. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 28, 2008, 15:52 locale показывает:
Цитировать LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: BRE от Октябрь 28, 2008, 16:37 Вот так попробуй:
Код: m_codec = QTextCodec::codecForName( "windows-1252" ); Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 28, 2008, 17:00 Так уже пробовал. Не помогает.
В этом случае даже под виндой отказывается русский текст из ини читать... Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: BRE от Октябрь 28, 2008, 17:32 Так уже пробовал. Не помогает. В этом случае даже под виндой отказывается русский текст из ини читать... Вот тестовый пример, под linux работает. Строка в ini файле в кодировке windows-1251. Код: #include <QCoreApplication> Если будет нужно, сброшу и ini-файл. ;D Еще обрати внимание на defaultValue в QSettings::value(), кодировки должны совпадать в файле исходника и ini-файле. Название: Re: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile) Отправлено: OS2 от Октябрь 28, 2008, 17:48 Всем спасибо, сам разобрался.
Вот мой окончательный вариант: Код: m_codec = QTextCodec::codecForName("windows-1251"); |