Android — 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 «)» … Нужно ли создавать файл настроек?

1

Решение

Проблема в том, что вы не вызываете синхронизацию после установки данных. Попробуйте вставить эту строку после настройки:

Setting.setValue("baseurl", data);
Setting.sync();

Это не должно быть необходимо в Windows, но, похоже, это необходимо в Windows.

Также, как предлагается в комментариях, я бы предложил использовать QSettings::IniFormat вместо QSettings::NativeFormat если вы действительно хотите использовать файлы вместо реестра в Windows.

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

Также обратите внимание, что вы можете непреднамеренно использовать неправильный путь, потому что вам придется явно добавлять символ «косой черты» перед именем файла «settings.ini». Однако это только примечание.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]