Qt 文件对话框在重新启动项目后不记得最后一个目录
Qt File Dialog doesn't remember the last directory after restarting project
我正在为我的项目加载一些文件....但每次 fileDialog 目录都是我的根目录...
我希望 fileDialog 记住我的路径,我已经尝试了以下 link qsettings-file-chooser-should-remember-the-last-directory 中的解决方案,但这只对同一个会话有效。
有没有办法为其他会话保存目录?(关闭应用程序并重新打开时)?
您可以使用 QSettings class。
这是一个简单的例子:
widget.h
#define WIDGET_H
#include <QWidget>
#include <QSettings>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QString lastDir;
QSettings *settings;
void settingsLoader();
void settingsSaver();
};
#endif // WIDGET_H
widget.cpp
#include <QFileDialog>
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
settings = new QSettings("MyCompany", "My soft name", this);
settingsLoader();
lastDir = QFileDialog::getExistingDirectory(this, tr("Open directory"), lastDir);
}
void Widget::settingsLoader()
{
lastDir = settings->value("LastDir", QDir::homePath()).toString();
}
void Widget::settingsSaver()
{
settings->setValue("LastDir", lastDir);
}
Widget::~Widget()
{
settingsSaver();
}
我正在为我的项目加载一些文件....但每次 fileDialog 目录都是我的根目录...
我希望 fileDialog 记住我的路径,我已经尝试了以下 link qsettings-file-chooser-should-remember-the-last-directory 中的解决方案,但这只对同一个会话有效。
有没有办法为其他会话保存目录?(关闭应用程序并重新打开时)?
您可以使用 QSettings class。
这是一个简单的例子:
widget.h
#define WIDGET_H
#include <QWidget>
#include <QSettings>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QString lastDir;
QSettings *settings;
void settingsLoader();
void settingsSaver();
};
#endif // WIDGET_H
widget.cpp
#include <QFileDialog>
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
settings = new QSettings("MyCompany", "My soft name", this);
settingsLoader();
lastDir = QFileDialog::getExistingDirectory(this, tr("Open directory"), lastDir);
}
void Widget::settingsLoader()
{
lastDir = settings->value("LastDir", QDir::homePath()).toString();
}
void Widget::settingsSaver()
{
settings->setValue("LastDir", lastDir);
}
Widget::~Widget()
{
settingsSaver();
}