Pregunta

He escribido una aplicación simple para usar qsettings.¿Puede alguien decirme qué mal estoy haciendo aquí?

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

Cuando depago, no devuelve False para "Configuración.Contains (" Baseurl ")" ... ¿Tenemos que crear el archivo de configuración?

¿Fue útil?

Solución

El problema es que no está llamando sincronización después de configurar los datos.Intente insertar esta línea después de la configuración:

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

Esto no debe ser necesario en Windows, pero parece ser necesario en Windows.

Además, como se sugiere en los comentarios, sugeriría usar QSettings::IniFormat en lugar de QSettings::NativeFormat, si realmente desea utilizar archivos en lugar de un registro potencialmente en Windows.

También debe considerar realizar el objeto de configuración como un miembro de la clase en lugar de construirlo todo el tiempo.

Además, tenga en cuenta que puede estar usando la ruta incorrecta involuntariamente porque tendría que agregar el carácter "Slash" explícitamente antes del nombre del archivo "Configuración.ini".Esta es solo una nota lateral, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top