QSetting у меня не работает нормально
Вопрос
Я написал простое приложение для использования QSettings.Может кто-нибудь сказать мне, что я здесь делаю не так..
mainwindow.h
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();
};
mainwindow.cpp
#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);
}
}
main.cpp
#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».Однако это всего лишь примечание.