On 2019-02-08 23:56, Murphy, Sean wrote:
Hi, just tested your example program in MSVC 2017 Qt 5.12.1 and it fails
as well.

But a simple fix is just to make sure that the QFile file isn't open at
the same time as you write out the settings to it.
I.e. in your example program, it suffices to move that first
file.close(); up to just before the "// write out via QSettings" comment
line is, then it runs flawlessly.

But perhaps that's not possible to keep those writes separate in time in
your "real" app that your porting?

Thanks for testing!

Yes, I discovered that issue as well, and then forgot to post a follow-up
here. Where I had trouble, and something I did differently in the real
app vs. the minimal example, is that the file I was trying to use to write
the settings to was a QTemporaryFile. I stumbled across the same fix you
did in the example, but that fix never seemed to work in my real app with a
QTemporaryFile. After testing, I believe that is because the QSettings
object is trying to open the associated settings file with write permissions,
and it isn't able to acquire them. In my example, it was because I already
had opened the file with write permissions (mistakenly thinking I needed
to do that before all the QSettings stuff). In my real app, I think that it
must be because QTemporaryFile holds a lock on the file so it can
remove it when the QTemporaryFile object goes out of scope, and
therefore the QSettings object gets an access error because the file is
already in use.

What I'm actually trying to accomplish is far more simple: I don't actually
want an INI file, I just want to get data that I've put into a QSettings object
written to a QString, in the INI file format. I couldn't see any other way to
do that than to write it out to a file, then read the file contents back into
a QString. So if you see a simpler solution for that, I'm open to suggestions!


Well there's always QSettings::registerFormat ( https://doc.qt.io/qt-5/qsettings.html#registerFormat )

Haven't tried it myself but it will give you a QSettings::SettingsMap which means you'll still have to serialize out it yourself to a QString, but at least you can get rid of the file i/o by ignoring those
QIODevices that QSettings hands over. /Rgrds Henry

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to