如何使用 QSettings 将 QString 添加到注册表

Posted

技术标签:

【中文标题】如何使用 QSettings 将 QString 添加到注册表【英文标题】:How to add QString to the registry using QSettings 【发布时间】:2012-08-04 02:31:05 【问题描述】:

我一直在开发我的第一个 gui 应用程序。我需要为所有功能存储一些值,所以我决定使用 QSettings 并学习如何使用 Windows 注册表。我找到了一个大小和位置的例子,所以我对这里发生的事情有一点了解,但由于某种原因,当我自己尝试时,我无法让它工作。我已经为此苦苦挣扎了几个星期,只是找不到任何关于如何将我自己的字符串添加到注册表的好的参考资料。下面是发生这种情况所需的所有相关代码。任何帮助或指向正确方向将不胜感激。我也有 Qt 4 的基础知识或类似的东西,但在这种情况下它对我没有太大帮助,所以如果有人对一些质量相关的文章或关于更高级 QT 主题的更全面的作品有任何快速参考,我会是有兴趣听听,但不要离题太远,我敢肯定那里有很多好书。

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)

createActions();
createMenus();
createMainWidget();
createIcons();
createDocks();
createStatusBar();

setMinimumSize(950,600);
setWindowTitle(tr("Black Ops Toolbox: Vrs. 0.0.0.12.01"));

QString defaultDirPath = "";

readSettings();


void MainWindow::readSettings()

QSettings settings;
QPoint pos = settings.value("pos", QPoint(25,25)).toPoint();
move(pos);
QSize size = settings.value("size",QSize(1200,900)).toSize();
resize(size);
QString defaultDirPath = settings.value("defaultDirPath", QString("c:/programfiles/")).toString();



void MainWindow::writeSettings()

QSettings settings;
settings.setValue("pos",pos());
settings.setValue("size",size());
settings.setValue("defaultDirPath", QVariant(QString *defaultDirPath).toString());


void MainWindow::closeEvent(QCloseEvent *event)

writeSettings();

MainWindow.h

class MainWindow : public QMainWindow

Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);

protected:
void closeEvent(QCloseEvent *event);

private:
void createActions();
void createActionEvents();
void createMenus();
void createMainWidget();
void createIcons();
void createDocks();
void createStatusBar();
void readSettings();
void writeSettings();

QString *defaultDirPath;
;

【问题讨论】:

【参考方案1】:

我真的还没有使用 QSettings,但是从 documentation 看来,您的代码中有些信息丢失了。

特别是,您必须使用 QSettings 构造函数给出(来自基本用法部分)组织名称和应用程序名称,例如

 QSettings settings("MySoft", "Star Runner");

或使用 QCoreApplication 设置,然后使用默认的 QSettings 构造函数

 QCoreApplication::setOrganizationName("MySoft");
 QCoreApplication::setOrganizationDomain("mysoft.com");
 QCoreApplication::setApplicationName("Star Runner");
 ...
 QSettings settings;

您是否尝试过其中一种方法来创建您的 QSettings?

【讨论】:

是的,对不起,我忘了注意我在主函数中建立了我的组织/应用程序名称,并使用了 regedit 来确保我的软件正确存储值,除了 QString 的情况默认目录路径。

以上是关于如何使用 QSettings 将 QString 添加到注册表的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 将 QString 路径保存到注册表中的 QSettings

如何将自定义类型保存到 QSettings?

QSettings & unicode

如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings

如何使用 QSettings 向我的配置文件添加注释?

QSettings():如何保存到当前工作目录