QApplication::processEvents在Windows中不起作用

QApplication::processEvents not working in Windows

本文关键字:不起作用 Windows processEvents QApplication      更新时间:2023-10-16

我正在进行一个项目,该项目显示使用Qt的QCustomPlot插件实时获取的实时数据。显示器的背景颜色为黑色,多个数据通道的颜色不同。当截图时,我们希望它对打印机友好,所以背景是白色的,所有数据都是黑色的。我正在考虑这样的解决方案:

  1. 通过操纵图形对象的指针,以我想要的方式更改所有颜色
  2. 使用QWidget::Grab((获取屏幕截图以获得QPixmap
  3. 将所有颜色更改回正常

起初这并不奏效,因为系统无法及时更改颜色以拍摄屏幕截图。所以我使用了一个QApplication::processEvents((,它在我的Mac上都能工作。

但是,它不适用于Windows 7(这是必需的(。有什么想法吗?

代码:

QSting fileLocation = "...";
toggleColors(false); //function to toggle the colors
QApplication::processEvents();
QPixmap shot = grab();
toggleColors(true);
shot.save(fileLocation, "png");

再说一遍。它适用于Mac,但不适用于Windows。

更新1.切换的内容颜色包括:

  if(enable)
    ui->plot->setBackground(QBrush(Qt::black));
  else
    ui->plot->setBackground(QBrush(Qt::white));
  ui->plot->repaint();

我也试过使用ui->plot->update()

我不确定Windows上的具体问题是什么,但我建议您在给定的小部件上调用QWidget::update((。这将强制下一次更新重新渲染自身。

另一方面,我不确定为什么toggleColors((没有以某种方式导致这种情况发生。

此外,请确保QWidget::setUpdatesEnabled(bool(未设置为"false"。

问题似乎出在QCustomPlot上。通过执行对QCustomPlot而非QWidget特定的ui->plot->replot()来解决该问题。