Question

J'ai écrit une application simple pour utiliser QSettings.Quelqu'un peut-il me dire quel mal je fais ici.

fenêtre principale.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();
}

Lorsque je débogue, il ne renvoie pas false pour "Setting.contains("baseurl")"...Devons-nous créer le fichier de configuration ?

Était-ce utile?

La solution

Le problème est que vous n'appelez pas sync après avoir défini les données.Essayez d'insérer cette ligne après le paramètre :

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

Cela ne devrait pas être nécessaire sous Windows, mais cela semble être nécessaire sous Windows.

De plus, comme suggéré dans les commentaires, je suggérerais d'utiliser QSettings::IniFormat au lieu de QSettings::NativeFormat si vous souhaitez vraiment utiliser des fichiers plutôt que potentiellement un registre sous Windows.

Vous devriez également envisager de créer l’objet settings en tant que membre de la classe plutôt que de le construire tout le temps.

Notez également que vous utilisez peut-être le mauvais chemin involontairement, car vous devrez ajouter explicitement le caractère « barre oblique » avant le nom du fichier « settings.ini ».Ceci n’est cependant qu’une remarque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top