Domanda

Ho scritto una semplice applicazione per utilizzare qsetings.Qualcuno può dirmi cosa sbaglio sto facendo qui ..

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();
}
.

Quando debug, non restituisce false per "impostazione.Contains (" Baseurl ")" ... Dobbiamo creare il file di impostazione?

È stato utile?

Soluzione

Il problema è che non stai chiamando la sincronizzazione dopo aver impostato i dati.Prova a inserire questa riga dopo l'impostazione:

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

Questo non dovrebbe essere necessario su Windows, ma sembra essere necessario su Windows.

Inoltre, come suggerito nei commenti, ti suggerirei di utilizzare QSettings::IniFormat anziché QSettings::NativeFormat se vuoi utilizzare i file piuttosto che il registro potenzialmente di Windows.

Dovresti anche considerare di rendere l'oggetto delle impostazioni come membro della classe piuttosto che costruendo tutto il tempo.

Inoltre, nota che potresti utilizzare la via sbagliata involontariamente perché è necessario aggiungere il carattere "Slash" esplicitamente prima del nome del file "Impostazioni.ini".Questa è solo una nota laterale, tuttavia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top