Qt 为什么QSettings不存储任何东西?

Qt 为什么QSettings不存储任何东西?,qt,qsettings,Qt,Qsettings,我想使用QSettings保存窗口的尺寸,因此我使用了以下两个函数来保存和加载设置: void MainWindow::loadSettings() { settings = new QSettings("Nothing","KTerminal"); int MainWidth = settings->value("MainWidth").toInt(); int MainHeight = settings->value("MainHeight").toInt

我想使用
QSettings
保存窗口的尺寸,因此我使用了以下两个函数来保存和加载设置:

void MainWindow::loadSettings()
{
    settings = new QSettings("Nothing","KTerminal");
    int MainWidth = settings->value("MainWidth").toInt();
    int MainHeight = settings->value("MainHeight").toInt();
    std::cout << "loadSettings " << MainWidth << "x" << MainHeight << std::endl;
    std::cout << "file: " << settings->fileName().toLatin1().data() << std::endl;
    if (MainWidth && MainHeight)
      this->resize(MainWidth,MainHeight);
    else
      this->resize(1300, 840);
}

void MainWindow::saveSettings()
{
  int MainHeight = this->size().height();
  int MainWidth = this->size().width();

  std::cout << "file: " << settings->fileName().toLatin1().data() << std::endl;
  std::cout << "saveSettings " << MainWidth << "x" << MainHeight << std::endl;

  settings->setValue("MainHeight",MainHeight);
  settings->setValue("MainWidth",MainWidth);

}
void主窗口::加载设置()
{
设置=新的Q设置(“无”、“K终端”);
int MainWidth=settings->value(“MainWidth”).toInt();
int main height=设置->值(“main height”).toInt();

std::cout
QSettings
通常不会在堆上实例化。要获得所需的效果,请遵循以及它在
QSettings
文档中的显示方式

void MainWindow::readSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
    if (geometry.isEmpty()) {
        const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
        resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
        move((availableGeometry.width() - width()) / 2,
             (availableGeometry.height() - height()) / 2);
    } else {
        restoreGeometry(geometry);
    }
}

void MainWindow::writeSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    settings.setValue("geometry", saveGeometry());
}
还要注意
saveGeometry()
restoregometry()
的使用。基于
QWidget
的GUI的其他类似有用的函数有
saveState()
restoreState()
(在上面的示例中未显示)

我强烈建议在
main.cpp
中设置默认值,如下所示:

QSettings::setDefaultFormat(QSettings::IniFormat); // personal preference
qApp->setOrganizationName("Moose Soft");
qApp->setApplicationName("Facturo-Pro");
然后,当您想在应用程序的任何部分中使用
QSettings
时,只需执行以下操作:

QSettings settings;

settings.setValue("Category/name", value);
// or
QString name_str = settings.value("Category/name", default_value).toString();
QSettings
通常经过高度优化,效果非常好

希望有帮助


我在其他一些地方谈到了QSettings的用法:


QSettings
通常不会在堆上实例化。要获得所需的效果,请遵循以及它在
QSettings
文档中的显示方式

void MainWindow::readSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
    if (geometry.isEmpty()) {
        const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
        resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
        move((availableGeometry.width() - width()) / 2,
             (availableGeometry.height() - height()) / 2);
    } else {
        restoreGeometry(geometry);
    }
}

void MainWindow::writeSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    settings.setValue("geometry", saveGeometry());
}
还要注意
saveGeometry()
restoregometry()
的使用。基于
QWidget
的GUI的其他类似有用的函数有
saveState()
restoreState()
(在上面的示例中未显示)

我强烈建议在
main.cpp
中设置默认值,如下所示:

QSettings::setDefaultFormat(QSettings::IniFormat); // personal preference
qApp->setOrganizationName("Moose Soft");
qApp->setApplicationName("Facturo-Pro");
然后,当您想在应用程序的任何部分中使用
QSettings
时,只需执行以下操作:

QSettings settings;

settings.setValue("Category/name", value);
// or
QString name_str = settings.value("Category/name", default_value).toString();
QSettings
通常经过高度优化,效果非常好

希望有帮助


我在其他一些地方谈到了QSettings的用法:


完美漂亮!谢谢!我认为
QSettings
在堆上分配时不起作用的原因是,它没有被破坏(除非调用
delete
)。需要
QSettings
的析构函数来调用其函数。非常好。可以手动调用sync函数使其在堆上工作。完美且漂亮!谢谢!我认为
QSettings
在堆上分配时不工作的原因是,它没有被析构函数(除非调用了
delete
)。并且需要
QSettings
的析构函数来调用其函数。非常好的一点。可以手动调用sync函数使其在堆上工作。