Android qset不';这对我来说没问题

Android qset不';这对我来说没问题,android,c++,qt,qt5,qsettings,Android,C++,Qt,Qt5,Qsettings,我已经编写了一个简单的应用程序来使用QSettings。有人能告诉我我到底做错了什么吗 主窗口 mainwindow.cpp #包括“mainwindow.h” #包括 #包括 主窗口::主窗口(QWidget*父窗口) :QMainWindow(父级) { pMainWidget=新的QWidget(父项); pMainLayout=新的QHBoxLayout(pMainWidget); pLabel=newqlabel(“这里有输出”,pMainWidget); pLineEdit=新的QL

我已经编写了一个简单的应用程序来使用QSettings。有人能告诉我我到底做错了什么吗

主窗口 mainwindow.cpp
#包括“mainwindow.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
{
pMainWidget=新的QWidget(父项);
pMainLayout=新的QHBoxLayout(pMainWidget);
pLabel=newqlabel(“这里有输出”,pMainWidget);
pLineEdit=新的QLineEdit();
pButtonShow=新的QPushButton(“显示”,pMainWidget);
PButtStart=新的QPushButton(“设置”,pMainWidget);
setCentralWidget(pMainWidget);
pMainWidget->setLayout(pMainLayout);
pMainLayout->addWidget(pLabel);
pMainLayout->addWidget(pButtonShow);
pMainLayout->addWidget(pLineEdit);
pMainLayout->addWidget(pbuttStart);
pSettingFile=QApplication::applicationDirPath()+“settings.ini”;
QObject::connect(pButtonShow,SIGNAL(clicked()),this,SLOT(showSettingData());
连接(PButtStart,信号(clicked()),此,插槽(setData());
}
MainWindow::~MainWindow()
{
}
void主窗口::setData()
{
QSettings设置(pSettingFile,QSettings::NativeFormat);
QString data=pLineEdit->text();
Setting.setValue(“baseurl”,数据);
}
void主窗口::showSettingData()
{
QSettings设置(pSettingFile,QSettings::NativeFormat);
if(Setting.contains(“baseurl”))
{
QString数据=Setting.value(“baseurl”).toString();
pLabel->setText(数据);
}
}
main.cpp
#包括“mainwindow.h”
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
返回a.exec();
}

当我调试时,它不会为“Setting.contains(“baseurl”)”返回false。。。我们必须创建设置文件吗?

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

Setting.setValue("baseurl", data);
Setting.sync();
这在Windows上不需要,但在Windows上似乎是必要的

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

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


另外,请注意,您可能无意中使用了错误的路径,因为您必须在“settings.ini”文件名之前显式添加“slash”字符。不过,这只是一个旁注。

请将您的问题限制为一个问题。这个网站的原则是一个好问题和一个好答案。另外,你能提供一个简单的例子吗?目前,您指的是一个设置问题,但这里似乎有一些用户界面代码,没有主功能、项目文件等。您也没有解释如何使用用户界面。@Laszlo编辑了上述问题,您如何使用用户界面?你能解释一下吗?首先,您尝试使用set,然后使用show按钮?您的意思是,您首先使用的是“显示”按钮,您希望contains返回false,但它在不先按“设置”按钮的情况下返回true?是。。我在“行编辑”中输入数据,单击“设置”按钮,然后单击“显示”按钮您是否尝试过QSettings::IniFormat而不是QSettings::NativeFormat?Native表示Windows上的注册表,这可能会导致问题。你使用的是哪种操作系统,安卓?对于这个问题,哪种Qt版本,Qt 4?好的。。我来核对一下,并标上答案。。。还有一件事,如果答案有意义,我们不应该给-1,对吗?@Abin:为什么?你也证实了你自己并没有解决这个问题。虽然它是一个有用的注释,但它只是一个注释,所以它应该是注释,或者是真正答案末尾的旁注,作为附加注释。我甚至可能会把它作为一个评论,就像我对你的答案所做的那样。我已经试过了。但不起作用,它没有创建文件。但是QSettings::IniFormat将起作用,并且这将创建存储数据的文件。
#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);
    }

}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
Setting.setValue("baseurl", data);
Setting.sync();