Please nominate your Qt Champions for 2021!

[SOLVED] QSettings with QList of a custom class

  • Hello!

    I'm relatively new to Qt (less than a month) and to this forums. I apologize in advance for any mistake.

    I'm working on a project for my degree and I'm having a problem.
    I have a QList of a custom class objects: (QList<Instructions> instructions)
    All my project goes around this QList and so far it is working great.
    My only problem is saving this QList so I can load it when the application launches.
    I've read and seen tutorials about QSettings and I've managed to save/load a type int variable but I'm having problem with this QList variable.

    I've seen this tutorial for a QList<QTime> but I can't figure out how to make this work with my Instruction class objects:
    QVariantList timeList;
    foreach(QTime t,times)
    settings.setValue("timeList", timeList);

    QVariantList reading = settings.value("timeList").toList();
    QList<QTime> times;
    foreach(QVariant v, reading)
    times << v.toTime();

    I understand the concept behind QSettings and the previous tutorial but I really can't adapt it to my problem.
    I would appreciate if someone could help me.

    Thank you!

  • hey Welcome to Qt!

    For saving complex type that are not supported directly with QSettings, you could look at saving your custom object to a xml file.
    Have a look at this if this is an option for you.

    You can always use QSettings but I found that for me, it was better to learn how to write/load an xml file if you plan to use this approach on the long term.

    Good luck!

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    You need to make your custom type known to QVariant using Q_DECLARE_METATYPE before you can using with e.g. QSettings.

  • Hi,
    Thank you both for your suggestions!

    As this project is intended for industrial purposes I think XML is a great solution.
    I followed some tutorials on how to use XML on Qt and managed to make it work (as well as understand) pretty well for what I intended to do.

    I'm leaving here the tutorials I followed in case someone stumbles upon this thread with the same problem: (I apologize if this is not allowed)
    I had to make some changes to my project but it's easy to understand.

    Thank you, once again!

Log in to reply