QApplication :: processEvents在Windows中不起作用

时间:2015-08-05 12:16:54

标签: c++ qt qpixmap qapplication

我正在开发一个项目,该项目使用Qt的QCustomPlot插件实时获取实时数据。显示器具有黑色背景颜色,并且多个数据通道的颜色不同。截取屏幕截图时,我们希望打印机友好,因此背景为白色,所有数据均为黑色。我在考虑这样的解决方案:

  1. 通过操作图形对象的指针
  2. 以我想要的方式更改所有颜色
  3. 使用QWidget :: grab()抓取屏幕截图以获取QPixmap
  4. 将所有颜色更改回正常
  5. 这首先不起作用,因为系统无法及时更改颜色以截取屏幕截图。所以我使用了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。 toggleColors的内容包括:

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

    我也试过了ui->plot->update()

2 个答案:

答案 0 :(得分:0)

我不确定Windows上的问题是什么,但我建议您在给定的小部件上调用QWidget :: update()。这迫使下一次更新重新渲染。

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

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

答案 1 :(得分:0)

问题似乎在于QCustomPlot。通过执行特定于ui->plot->replot()而非QCustomPlot的{​​{1}}来解决此问题。