申请 - > QT中的流程消息?

时间:2012-06-24 09:54:32

标签: c++ qt c++builder

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

Application->Processmessages();

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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

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

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

以下是一个例子:

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