Hi, Is your QTimer access before the QGuiApplication is created (static singleton)? That could explain why this complain and moving the singleton instance into the GuiApplcation constructor solve your problems.
What we do over here, I have a custom template method that register the singleton from Qml and from C++ singleton class (templated too). This keep a map of type and pointer to object: typedef QMap<QQmlEngine*, QMap<QString, QPointer<QObject>>> SingletonMapType; extern SingletonMapType singleton_instances_map_; after that the C++ singleton fetch into that map and so does my Qml singleton register type, so I get a single instance no matter who the C++ or the Qml request the singleton first. It might not be ideal, but it work well. So they are not really a static instance but instead a version that is kept based on the current QQmlEngine and application. If your application only use a single QQmlengine (like most of them do, you can skip the first layer of the map and simply use the map from string to QObject. For the QString you can extract it from template type and T::staticMetaObject.className() you only need a getSingleton<T>() and a createSingleton<T>() class to fill the blank. So my class are not bake with singleton, there might be an instance that is singleton instead (make it easier to test the class without enforcing singleton into it and I can still make memento and the like of those object without being screw to have only hard single copy. Jérôme Godbout, B. Ing. Software / Firmware Team Lead O: (418) 682-3636 ext.: 114 C: (581) 777-0050 godbo...@dimonoff.com<mailto:godbo...@dimonoff.com> [signature_757333330]<https://www.dimonoff.com/> dimonoff.com<https://www.dimonoff.com/> 1015 Avenue Wilfrid-Pelletier, Québec, QC G1W 0C4, 4e étage From: Jason H <jh...@gmx.com> Date: Friday, May 7, 2021 at 10:10 AM To: Jérôme Godbout <godbo...@amotus.ca> Cc: interestqt-project.org <interest@qt-project.org> Subject: Re: [Interest] QML Singleton and QTimer? Well, the documentation gives the example of the singleton being instantiated at the main.cpp:main() level. It felt a little wrong, but I subclassed QGuiApplication, and created and registered the singleton there: GuiApplication::GuiApplication(int argc, char*argv[]): QGuiApplication::QGuiApplication(argc, argv) { m_hardwareInterface = new HardwareInterface; qmlRegisterSingletonInstance("com.company", 1, 0, "HardwareInterface", m_hardwareInterface); } This seems to work, but seemed unnatural. Sent: Thursday, May 06, 2021 at 5:42 PM From: "Jérôme Godbout" <godbo...@amotus.ca> To: "Jason H" <jh...@gmx.com>, "interestqt-project.org" <interest@qt-project.org> Subject: Re: [Interest] QML Singleton and QTimer? You can check the thread affinity of an object and the current thread that will display the problem you encounter. Use a queued signal into the QTimer thread to sent the start (it will be delayed until the thread process the event, hopefully you do no need precision there). Jérôme Godbout, B. Ing. Software / Firmware Team Lead O: (418) 682-3636 ext.: 114 C: (581) 777-0050 godbo...@dimonoff.com<mailto:godbo...@dimonoff.com> [signature_93124102]<https://www.dimonoff.com/> dimonoff.com<https://www.dimonoff.com/> 1015 Avenue Wilfrid-Pelletier, Québec, QC G1W 0C4, 4e étage From: Interest <interest-boun...@qt-project.org> on behalf of Jason H <jh...@gmx.com> Date: Thursday, May 6, 2021 at 5:34 PM To: interestqt-project.org <interest@qt-project.org> Subject: [Interest] QML Singleton and QTimer? I'm trying to have a simple singleton class, but it doesn't appear that I can use timers? HardwareInterface::HardwareInterface(QObject *parent) : QObject(parent) { m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, this, [=](){ qDebug() << Q_FUNC_INFO; }); m_timer->start(100); // QObject::startTimer: Timers can only be used with threads started with QThread } main.cpp: int main() { ... qmlRegisterSingletonInstance("com.company.example", 1, 0, "HardwareInterface", &hardwareInterface); ... How do we go about using timers in singletons? _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest