Qsettings не создается файл

Обновлено: 05.07.2024

Я пытаюсь создать файл ini, который будет содержать данные конфигурации, у меня есть синглетный класс , который устанавливает объект QSettings следующим образом :

это соответствует документу, но когда я смотрю в своем приложении dir, там нет файла myconfig.ini, что я делаю не так ?

2 ответа

Я использую QSettings для хранения некоторых настроек в файле INI. Однако моя программа не на английском языке, поэтому некоторые настройки содержат строки Unicode. Похоже, что Qt записывает INI файла не в utf8 или utf16, а в какой-то другой кодировке, в строке Привет мир! (Рус. Привет, мир!).

Я использую QSettings для хранения некоторых данных в виде файла ini в Windows. Я хочу увидеть файл ini, но я не знаю, где находится файл ini. Это мой код: QSettings *set = new QSettings(QSettings::IniFormat, QSettings::UserScope, bbb, aaa); set->setValue(size, size()); set->setValue(pos.

Я считаю, что для того, чтобы заставить файл QSettings появиться, вам нужно будет установить в нем хотя бы одно значение, а затем вызвать метод sync(). Посмотрите, подойдет ли вам приведенный ниже пример:

надеюсь, это поможет, с уважением

Я не думаю, что "/"+CONFIG_FILE_NAME возвращает ожидаемый результат. Может быть причиной вашей проблемы.. В любом случае оператор +() присутствует в классе QString, поэтому QDir::currentPath() + "/my_config_file.ini" должен работать нормально.

Похожие вопросы:

Мне нужно использовать filepath в качестве имени раздела в файле ini, и я пытаюсь сделать это следующим образом: QSettings ini(iniPath, QSettings::IniFormat);.

Я прочитал некоторые QSettings из файла .ini: QSettings* settingsDocRoot=new QSettings(_settingsFile ,QSettings::IniFormat, parent); Это передается какому-то объекту. Однако затем я делаю копию.

У меня есть приложение, которое я пишу, используя Qt 4.5.2 на Windows. Я храню некоторые настройки в файле INI и использую QSettings для загрузки и сохранения настроек. Я хотел бы получить некоторые.

Я использую QSettings для хранения некоторых настроек в файле INI. Однако моя программа не на английском языке, поэтому некоторые настройки содержат строки Unicode. Похоже, что Qt записывает INI.

Я использую QSettings для хранения некоторых данных в виде файла ini в Windows. Я хочу увидеть файл ini, но я не знаю, где находится файл ini. Это мой код: QSettings *set = new.

Я создаю файл INI, а затем пытаюсь его прочитать. Ошибок компиляции нет, и файл есть, но я не получаю никаких данных в своем QStringList QFile checkConfig(configPath); if(checkConfig.exists())

Я проверил его, но еще не достиг предела, поэтому мне было интересно, имеет ли файл .ini, созданный с помощью QSettings, ограничение длины строки ? Не могу найти никакой соответствующей информации в.

Алоха, Я разрабатываю небольшой ServerManager для себя, используя QT (C++). До этого момента все работало: Я использую QSettings для хранения всех соответствующих настроек (например, сервер.

Я использую QSettings для хранения некоторых настроек моего приложения в файле INI . На Windows все работает нормально, и мой файл INI хранится в той же папке моего приложения. Но в OS X я не могу.

Заметки

среда, 19 марта 2014 г.

Qt: Работа с ini файлом

Часто приходится иметь дело с ini файлами. Так вот, Qt предоставляет класс для работы с этим форматом файлов. На первый взгляд кажется удобным, но посмотрим. В данной статье описано как работать с ini файлами.

Заметка! В ini файле символ ; (точка с запятой) является символом комментария. Поэтому, если значением ключа будет строка содержащая ; , то такую строку нужно заключать в двойные кавычки. При этом, если двойные кавычки есть частью строки, то их нужно экранировать символом \ .

1. Чтение данных из ini файла

Для удобства можно воспользоватся методами beginGroup() и endGroup():

Метод value() принимает два параметра. Первый параметр, типа QString , это путь к ключу, который включает в себя секцию и ключ разделенные слэшем. Второй параметр, типа QVariant - значение по умолчанию, которое используется в том случае, если ключа в указанной секции не существует. Возвращает метод значение типа QVariant .

2. Добавление и изменение данных в ini файле

Метод setValue() принимает два параметра. Первый параметр, типа QString , указывает путь к создаваемому, или изменяемому ключу. Если ключа не существует, то он будет создан. Второй параметр, типа QVariant - задает значение записываемого ключа.

3. Проверка существования ключа

Метод contains() проверяет ключ на наличие его в ini файле. Принимает один параметр типа QString и возвращает булево значение.

4. Проверка существования секции

Проверить существует ли секция в ini файле можно таким способом:

Заметка! Следует учитывать что метод childGroups() игнорирует пустые секции.

5. Удаление ключа, или секции

Заметка! Если удаляется последний ключ в секции, то удаляется и сама секция.

Я использую Qt5.7 в Windows 7.
В моем текущем приложении у меня есть собственный класс диспетчера настроек, который выглядит так:

Источник cpp:

Моя проблема: я дал приложение некоторым друзьям, и, вероятно, они запустили его с другим рабочим каталогом или чем-то еще, и приложение не нашло файл settings.ini , следовательно, оно не сработало, как должно .

Итак, возникает вопрос: как я могу изменить приведенный выше код, чтобы получить файл settings.ini из каталога приложения / исполняемого файла? Очевидно, что файл settings.ini всегда находится в той же папке, что и само приложение.

2 ответа

Кажется немного странным видеть объект со всеми нестатическими функциями-членами и всеми статическими элементами данных. Вы используете это как SettingsManager()::read(. ) ? Возможно, было бы более подходящим просто использовать функции в пространстве имен или одноэлементном шаблоне.

В любом случае, возвращаясь к вопросу, вы можете использовать QApplication :: applicationDirPath () для этого. Он получает абсолютный путь к каталогу, содержащему двоичный файл приложения. Например.

Получает абсолютный путь туда, куда вы хотите.

Похоже, что у вас есть проблема с этим, поскольку вы используете его в глобальном статическом инициализаторе, который запускается до входа в main (), поэтому QApplication еще нет. Вы можете использовать статическую переменную функции, чтобы отложить инициализацию до вызова функции.

Вы можете выбрать либо одноэлементный SettingsManager, либо просто QSettings (я думаю, что QSettings, вероятно, более странный, как я сказал выше).

Пример синглтона QSettings: (необходимо определить в cpp)

Если вы используете это в своих функциях, он не будет создавать QSettings, пока вы не вызовете функцию, и к тому времени будет экземпляр QApplication. Но я бы предпочел сделать весь класс одноэлементным:

settingsmanager.h :

settingsmanager.cpp :

Путь настройки можно задать с помощью QSettings::setPath

Должен сделать свое дело.

Поскольку у вас, кажется, один ini-файл, а не для каждой пользовательской базы, я думаю, что здесь подходит SystemScope

Примечание: в этом случае Qt будет искать все ini-файлы в вашей программе для SystemScope , поэтому не используйте это, если вам нужно несколько ini-файлов. место для SystemScope


Россия

Пишем «плавающее» окно на qt5. Часть 3. Новое подменю и сохранение позиции окна.

Это третья часть, предыдущие части вы можете найти на моем сайте: часть 1 , часть 2 .

В этой части мы добавим заголовок в подменю и научим приложение сохранять последнюю позицию нашего «плавающего» окна.

Добавляем заголовок в подменю

Создадим новый C++ класс

Щелкнем по Sources и выберем Add new…

Выберем С++ и C++ Class

В следующем окне в Class name введем TextSeparator

Жмем Next и создаем класс, открываем файл textseparator.cpp и заменяем его содержимое следующим кодом:

Нажимаем F4 и заменяем содержимое файла кодом:

1. Мы объявили новый класс - TextSeparator являющийся потомком QWidgetAction Это сделано для того, чтобы можно было сразу передать объект класса в QMenu при создани и разделителя.

2. Мы объявили конструктор класса, чтобы сразу задать текст для нашего сепаратора, цвет фона и текста.

3. В реализации конструктора мы создаем QLabel , задаем высоту для неё, стиль и выравнивание.

4. М ы задаем QLabel виджетом по-умолчанию, таким образом QWidgetAction будет использовать его при отрисовке пункта меню.

Вы можете с меткой делать что угодно и форматировать её как вам вздумается, создать пользовательский виджет и добавить в него, например, картинку с текстом, а потом просто создать объект класса в конструкторе нашего сепаратора и задать этот объект как виджет по умолчанию.

Теперь на нужно добавить наш заголовок в подменю.

Откроем floatwindow.cpp и добавим в конец FloatWindow::FloatWindow(QWidget *parent) :

Удалим из void FloatWindow::contextMenuEvent(QContextMenuEvent *event) строку

Нажмем F4 и добавим в конец private:

не забудьте добавить

Запускаем сборку и любуемся новым подменю


Вот и всё, мы слегка улучшили наше подменю, а дальнейшие возможности улучшения ограничены только вашим воображением.

Сохранение положения «плавающего окна»

Мы создали «плавающее» окно, но оно каждый раз появляется по центру экрана, что не совсем то, что нам нужно. Давайте добавим функционал, позволяющий нам сохранять позицию нашего окошка при выходе из программы.

В Qt5 для сохранения состояния объектов используется QSettings

Этот класс позволяет легко и просто сохранять любые значения QString , QRect , и QImage .

Откроем floatwindow.h и добавим после

После void mouseMoveEvent(QMouseEvent *evt);

Нажмем F4 и добавим в конец файла

В конец FloatWindow::FloatWindow(QWidget *parent) : добавим

Запустим сборку проекта Ctrl+R и переместим окно в новую позицию. Теперь при повторном запуске окно появится на старом месте.

Давайте разберемся, как это работает:

Класс QSettings не зависит от операционной системы. В зависимости от OS он автоматически выбирает место для сохранения данных:

1. В Windows данные хранятся в реестре, если вы откроете редактор реестра regedit.exe то вы сможете найти сохраненные настройки в ветке: Компьютер\HKEY_CURRENT_USER\Software\AltuninVV\Clocks\FloatWindow

2. Unix-подобные системы — настройки хранятся в ini-файлах

3. MacOS и iOS – настройки хранятся в .plist-файлах.

Заключение

На этом всё, мы смогли немного украсить наше всплывающее меню и добавили функционал, сохраняющий позицию нашего «плавающего» окошка после выхода из программы.

В следующий раз мы добавим возможность переключаться между режимами отображения часов — это будут цифровые часы и часы со стрелками.

Читайте также: