Q设置对我来说效果不佳
QSetting doesn't works fine for me
我编写了一个使用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.contations("baseurl")"返回false…我们必须创建设置文件吗?
问题是设置数据后没有调用sync。尝试在设置后插入此行:
Setting.setValue("baseurl", data);
Setting.sync();
这在Windows上不应该需要,但在Windows上似乎是必要的。
此外,正如评论中所建议的,如果您真的想在Windows上使用文件而不是潜在的注册表,我建议使用QSettings::IniFormat
而不是QSettings::NativeFormat
。
您还应该考虑将settings对象作为类成员,而不是一直构造它。
此外,请注意,您可能无意中使用了错误的路径,因为您必须在"settings.ini"文件名之前明确添加"斜杠"字符。然而,这只是一个旁注。
相关文章:
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 这对我来说真的很难,我该怎么办
- mod 功能对我来说无法正常工作
- 在这种情况下,为什么Sfinae对我来说不正确以及如何修复它
- 使用嵌套环以简单(对我来说很难)输出
- 是否可以安全地假设64位指针中的16个高位(2个对我来说足够了)是未设置的
- 无符号和有符号int(对我来说)之间的比较似乎是必需的(c++)
- 第4章 斯特劳斯特鲁普钻头一个具有挑战性的一步(至少对我来说!
- libc ++is_copy_constructible对我来说似乎是错误的
- 对我来说,使 boost::statechart::state_machine 线程安全的最简单方法是什么?
- 未定义的引用错误对我来说没有任何意义
- 类函数在工作时被击中是错过的,即使它们是相同的(对我来说)
- default_random_engine对我来说不是随机值
- 提升异步操作不起作用(对我来说)
- SEG在非常复杂的(对我来说)程序中出错
- 为什么我在Codechef的褪色回文中得到一个WA,即使我在我的代码中没有发现任何错误,它对我来说工作得很好
- 洛基的长寿功能对我来说似乎不安全,是这样吗?
- Q设置对我来说效果不佳
- CUDAMemcpy对我来说毫无意义…为什么要在普通c++中指定设备内存?