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

Application->Processmessages in QT?

本文关键字:处理 消息 gt 应用程序 QT      更新时间:2023-10-16

在Borland 6中,我经常使用它来解开程序操作:

Application->Processmessages();

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

谁能帮我?

在Qt中,你会使用静态函数QApplication::processEvents()

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

下面是一个示例:

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 移动到工作线程。