QSetting对我来说效果不错

时间:2014-04-12 06:50:20

标签: android c++ qt qt5 qsettings

我写了一个简单的应用程序来使用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();
}

当我调试时,对于“Setting.contains(”baseurl“),它不返回false”......我们是否必须创建设置文件?

1 个答案:

答案 0 :(得分:0)

问题是您在设置数据后没有调用同步。尝试在设置后插入此行:

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

在Windows上不需要这样做,但在Windows上似乎是必要的。

另外,正如评论中所建议的那样,如果您真的想在Windows上使用文件而非可能的注册表,我建议使用QSettings::IniFormat而不是QSettings::NativeFormat

您还应该考虑将设置对象设置为类成员,而不是一直构建它。

另外,请注意您可能无意中使用了错误的路径,因为您必须添加&#34;斜杠&#34;字符在&#34; settings.ini&#34;之前明确显示文件名。然而,这只是一个侧面说明。