QT 中的应用程序->处理消息?

2024-05-08

在 Borland 6 中,我经常使用它来解除程序操作的卡住:

Application->Processmessages();

现在,对于 QT 4.8.1,我在这个外国(对我来说)QT 文档中找不到。

谁能帮我?


在 Qt 中,您可以使用静态函数QApplication::processEvents().

唉,你的问题是你的代码设计被破坏了。你永远不需要打电话processEvents只是为了“解开”东西。您的所有 GUI 代码都应包含需要很短时间(大约为单毫秒:~0.001s)的从运行到完成的方法。如果某件事需要更长的时间,您必须将其分成更小的部分,并在处理每个部分后将控制权返回给事件循环。

这是一个例子:

class Worker: public QObject
{
  Q_OBJECT
  int longWorkCounter;
  QTimer workTimer;
public:
  Worker() : ... longWorkCounter(0) ... {
    connect(workTimer, SIGNAL(timeout()), SLOT(longWork());
  }
public slots:
  void startLongWork() {
    if (! longWorkCounter) {
      workTimer.start(0);
    }
  }
private slots:
  void longWork() {
    if (longWorkCounter++ < longWorkCount) {
      // do a piece of work
    } else {
      longWorkCounter = 0;
      workTimer.stop();
    }
  }
};

零持续时间计时器是每次事件队列为空时调用代码的一种方法。

如果您正在调用第三方阻塞库代码,那么唯一的(不幸的)修复是将这些操作放入 QObject 中的槽中,并将该 QObject 移动到工作线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 中的应用程序->处理消息? 的相关文章

随机推荐