簡體   English   中英

如何將QMap存儲到QSetting變量中

[英]How to store a QMap into a QSetting variable

我正在嘗試使用QSettings在我的QT應用程序中保存一些設置。 為此,我定義了一個類型:

typedef QMap
    <
    QString,
    QMap<QString, QVariant>
    >
QSession;

之后,我已經注冊了它

Q_DECLARE_METATYPE(QSession);

要創建一些條目並在運行時讀取它們后沒有問題,但我在關閉應用程序時遇到以下錯誤

QVariant::save: unable to save type 'QSession' (type id: 1067).

我的保存功能看起來像這樣

void saveSession()
{
    QSession session;

    for(auto it = pool.begin(); it != pool.end(); ++it)
    {
        QString hash(toQString((*it).getHash()));

        session[hash]["name"] = toQVariant(toQString((*it).getName()));
        session[hash]["size"] = toQVariant((*it).getSize());
        session[hash]["timeout"] = toQVariant((*it).getTimeout());
    }

    this->settings.setValue("session", QVariant::fromValue(session));
}

問題出在哪兒? 謝謝!

您必須為QSession類型注冊流操作符-請參閱qRegisterMetaTypeStreamOperators

QSettings可以序列化QVariant。 由於您可以將QHash存儲在QVariant中,因此我建議使用QHash而不是QMap。

http://doc.qt.io/qt-5/qvariant.html#QVariant-25http://doc.qt.io/qt-5/qvariant.html#toHash

void saveSession()
{
    QHash<QString,QVariant> session;

    for(auto it = pool.begin(); it != pool.end(); ++it)
    {
        QString hash(toQString((*it).getHash()));

        QHash<QString, QVariant> tmp;
        tmp[ "name" ]    = toQVariant(toQString((*it).getName()));
        tmp[ "size" ]    = toQVariant((*it).getSize());
        tmp[ "timeout" ] = toQVariant((*it).getTimeout());

        session.insert( hash, QVariant( tmp ) );
    }

    this->settings.setValue( "session", session );
}

該代碼未經測試,但是我想它應該可以完成您期望的工作。 要從QSettings對象獲取值,您可以執行

QHash<QString, QVariant> session = settings.value( "session" ).toHash();
for( ... )
{
    QHash<QString,QVariant> data = iterator.value().toHash();
    // do whatever you want with data[ "name" ] etc.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM