the application I’m trying to design with Qt is quite data intensive; it is essentially a database. I’m looking for a design that would allow me to keep the UI reactive. My guess is I should keep only the UI in the main thread and create a thread for the database.
However:
– creating a database object inheriting from QThread doesn’t seem to be a natural design (what would run() be? )
– I assume I would need to use signals and slots for UI / core interaction; yet this feature seem to be relatively recent in Qt, so I’m wondering if my “design” is wrong.
– QObject descendants are apparently designed to live in the thread in which they were created, so I’m concerned the communication of models (from the database thread) to the UI thread will be problematic.
Thanks for your comments.
You might consider using QtConcurrent::run(). You’ll pass in the function you want. It’ll spool off a thread to run the function and give you a QFuture that you can use to get the eventual result. You could poll the QFuture to see if it
isFinished(). Better, however, may be to use QFutureWatcher which watches the QFuture for you and emits a signal when it’s done. See the example code blurb in QFutureWatcher.