应用程序 - > Processmessages在QT?(Application->Proce

2019-09-18 10:47发布

在Borland公司6我经常用这个来脱胶程序操作:

Application->Processmessages();

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

谁能帮我?

Answer 1:

在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的工作线程。



文章来源: Application->Processmessages in QT?