QFileDialog多个实例的历史记录

5

我在我的C++应用程序中使用QT。我知道当我使用QFileDialog时,历史记录保存在注册表中。假设我在应用程序中有多个QFileDialog实例。我能否分别为每个实例保存历史记录?据我所知,似乎同一注册表条目会更新每个实例。

1个回答

2
您可以为每个QFileDialog实例使用不同的QSettings条目,通过这种方式,您可以管理历史记录长度和位置。
类似于这样的东西。
void callFileDialog(QLinkedList<QString> & fileDialogHistory)
{
    QString fileName =  QFileDialog::getOpenFileName(Q_NULLPTR, "Open File", 
    QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
    if(!fileName.isNull()){
        fileDialogHistory << fileName;
    }
}

void saveFileDialogHistory(QLinkedList<QString> & fileDialogHistory, QString 
fileDialogHistoryName = "History_Default")
{
    QSettings settings;
    settings.beginWriteArray(fileDialogHistoryName);
    int index = 0;
    for (QLinkedList<QString>::iterator it = fileDialogHistory.begin(); it != fileDialogHistory.end(); ++it){
        settings.setArrayIndex(index);
        settings.setValue("filePath", QFileInfo(*it).filePath());
        index++;
    }
    settings.endArray();
}

你能帮助我一个小例子吗? - Jackzz
你可以按照Qt文档中的基本用法进行操作:http://doc.qt.io/qt-5/qsettings.html#basic-usage - Bastien Thonnat
基本使用后,您可以使用 foreach QFileDialog 部分,例如 http://doc.qt.io/qt-5/qsettings.html#section-and-key-syntax - Bastien Thonnat
对于数组序列化,您可以使用beginReadArray和beginWriteArray。http://doc.qt.io/qt-5/qsettings.html#beginReadArray - Bastien Thonnat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接