使用while循环更新标签时,QT表单按钮在QT表单上不起作用

时间:2012-06-07 21:28:01

标签: qt qt-creator

我在QT中创建了GUI应用程序。它有一些按钮和标签。 该程序在while循环中按顺序从视频文件中获取图像,并通过刷新将其显示在标签上。在启动时,按钮工作正常,但是当我单击播放按钮并开始视频显示时,其他按钮无法单击,如果我坚持单击它们,程序将不响应并停止工作。即使我已经考虑了很多,我也想不出来。我不认为需要代码才能显示此问题,但如果您要求,我可以发布相关部分

提前致谢。

3 个答案:

答案 0 :(得分:2)

问题是当你的while()循环正在执行时,你永远不会将控制权返回给事件循环。事件循环调度排队的重绘事件等。您可能希望在由计时器触发的插槽中一次执行一个图像,如下所示:

class Gui {
Q_OBJECT
...
protected slots:
  void openFile(const QString &);
  void nextImage();
protected:
  QTimer imageTimer;
};

void Gui::Gui(...)
{
   ...
   connect(imageTimer, SIGNAL(timeout()), SLOT(nextImage());
   ...
}

void Gui::openFile(const QString & fileName)
{
   const int imagePeriod = 1000/25; // [ms], set to 25 frames per second
   ...
   imageTimer.start(imagePeriod);
}

void Gui::nextImage()
{
   QImage p;
   // read image from the file onto the image
   ui.label->setPixmap(p);
   // no need to call update() on the label!
}

答案 1 :(得分:0)

为什么要在标签上显示图像?

您可能需要一个线程来读取和循环视频。这样,其他输入仍然可以被处理,并且不会使您的应用程序崩溃。

答案 2 :(得分:0)

如果您使用的是Repaint方法,则可以使用

而不是使用重绘方法
        QCoreApplication::processEvents();

它必须解决你的问题。