Я написал простое приложение для использования QSettings. Может кто-нибудь сказать мне, что я не так делаю здесь ..
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QWidget *pMainWidget;
QHBoxLayout *pMainLayout;
QSettings *pSetting;
QLabel *pLabel;
QPushButton *pButtonShow;
QPushButton *pButtonSet;
QLineEdit *pLineEdit;
QString pSettingFile;
public slots:
void showSettingData();
void setData();
};
#include "mainwindow.h"#include <QtCore/QCoreApplication>
#include <QApplication>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
pMainWidget = new QWidget (parent);
pMainLayout = new QHBoxLayout(pMainWidget);
pLabel = new QLabel("Output comes here",pMainWidget);
pLineEdit = new QLineEdit();
pButtonShow = new QPushButton("Show", pMainWidget);
pButtonSet = new QPushButton("Set", pMainWidget);
setCentralWidget(pMainWidget);
pMainWidget->setLayout(pMainLayout);
pMainLayout->addWidget(pLabel);
pMainLayout->addWidget(pButtonShow);
pMainLayout->addWidget(pLineEdit);
pMainLayout->addWidget(pButtonSet);
pSettingFile = QApplication::applicationDirPath()+"settings.ini";
QObject::connect(pButtonShow, SIGNAL(clicked()), this, SLOT(showSettingData()));
QObject::connect(pButtonSet, SIGNAL(clicked()), this, SLOT(setData()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::setData()
{
QSettings Setting(pSettingFile, QSettings::NativeFormat);
QString data = pLineEdit->text();
Setting.setValue("baseurl", data);
}
void MainWindow::showSettingData()
{
QSettings Setting(pSettingFile, QSettings::NativeFormat);
if (Setting.contains("baseurl"))
{
QString data = Setting.value("baseurl").toString();
pLabel->setText(data);
}
}
#include "mainwindow.h"#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Когда я отлаживаю, он не возвращает false для «Setting.contains (» baseurl «)» … Нужно ли создавать файл настроек?
Проблема в том, что вы не вызываете синхронизацию после установки данных. Попробуйте вставить эту строку после настройки:
Setting.setValue("baseurl", data);
Setting.sync();
Это не должно быть необходимо в Windows, но, похоже, это необходимо в Windows.
Также, как предлагается в комментариях, я бы предложил использовать QSettings::IniFormat
вместо QSettings::NativeFormat
если вы действительно хотите использовать файлы вместо реестра в Windows.
Вам также следует рассмотреть возможность создания объекта настроек как члена класса, а не создавать его постоянно.
Также обратите внимание, что вы можете непреднамеренно использовать неправильный путь, потому что вам придется явно добавлять символ «косой черты» перед именем файла «settings.ini». Однако это только примечание.
Других решений пока нет …