1

我正在开展一个项目,该项目使用 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. toggleColors 的内容包括:

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

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

4

2 回答 2

0

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

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

另外,确保 QWidget::setUpdatesEnabled(bool) 没有设置为“false”。

于 2015-08-05T12:20:39.717 回答
0

看来问题出在QCustomPlot. 它是通过执行ui->plot->replot()特定于QCustomPlot而不是特定于的来解决的QWidget

于 2015-08-05T13:18:08.420 回答