gpt4 book ai didi

android - QSetting 不适合我

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:13 26 4
gpt4 key购买 nike

我编写了一个简单的应用程序来使用 QSettings。谁能告诉我我在这里做错了什么..

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

主窗口.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...我们必须创 build 置文件吗?

最佳答案

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

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

这在 Windows 上应该不需要,但在 Windows 上似乎是必需的。

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

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

另请注意,您可能无意中使用了错误的路径,因为您必须在“settings.ini”文件名之前明确添加“斜杠”字符。然而,这只是旁注。

关于android - QSetting 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com