【问题标题】:QObject Child Class Not Detecting QGuiApplication Event LoopQObject 子类未检测到 QGuiApplication 事件循环
【发布时间】:2021-12-08 18:56:48
【问题描述】:

当我尝试在从 QObject 派生的类中启动 QTimer 时,我收到警告

QObject::startTimer:定时器只能用于以 QThread 启动的线程

并且计时器不运行。根据答案here,我的自定义类似乎没有检测到由 QGuiApplication 创建的 QEventLoop。

我的 main.cpp

...
classA objA;
...
QGuiApplication app(argc, argv);
...

我的班级A.h

class classA : public QObject
{
   Q_OBJECT
   private: 
      QTimer m_oTimer;
...

我的classA.cpp

classA::classA()
{
   ...
   m_oTimer.start(100);
   ...
}

如何在不创建新 QEventLoop 的情况下解决此问题?

【问题讨论】:

  • 更改为QGuiApplication app(argc, argv); classA objA;
  • @eyllansec 你打败了我:D 我能够解决这个问题,并考虑将它作为 QA 发布到 SO 以帮助其他人 :)

标签: c++ qt qtimer qapplication qeventloop


【解决方案1】:

我能够通过更改我的 classA 和 QGuiApplication 的声明顺序来解决问题。看来任何QObject子类要检测QGuiApplication Eventloop,都必须在QGuiApplication之后声明。

我的 main.cpp:

...
QGuiApplication app(argc, argv);
...
classA objA;
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多