QApplication::processEvents 在 Windows 中不工作
QApplication::processEvents not working in Windows
我正在开展一个项目,该项目使用 Qt 的 QCustomPlot 插件显示实时获取的实时数据。显示屏的背景色为黑色,多个数据通道的颜色不同。截图时,我们想让它适合打印,所以背景是白色的,所有数据都是黑色的。我正在考虑这样的解决方案:
- 通过操纵图形对象的指针以我想要的方式更改所有颜色
- 使用 QWidget::grab() 获取屏幕截图以获得 QPixmap
- 将所有颜色恢复正常
起初这行不通,因为系统无法及时更改颜色以截取屏幕截图。所以我使用了 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()
。
我不确定 Windows 的具体问题是什么,但我建议您在给定的小部件上调用 QWidget::update()。这会强制下一次更新重新呈现自己。
另一方面,我不确定为什么 toggleColors() 没有以某种方式导致这种情况发生。
此外,确保 QWidget::setUpdatesEnabled(bool) 未设置为 "false."
看来问题出在 QCustomPlot
。它是通过执行特定于 QCustomPlot
而不是 QWidget
.
的 ui->plot->replot()
解决的
我正在开展一个项目,该项目使用 Qt 的 QCustomPlot 插件显示实时获取的实时数据。显示屏的背景色为黑色,多个数据通道的颜色不同。截图时,我们想让它适合打印,所以背景是白色的,所有数据都是黑色的。我正在考虑这样的解决方案:
- 通过操纵图形对象的指针以我想要的方式更改所有颜色
- 使用 QWidget::grab() 获取屏幕截图以获得 QPixmap
- 将所有颜色恢复正常
起初这行不通,因为系统无法及时更改颜色以截取屏幕截图。所以我使用了 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()
。
我不确定 Windows 的具体问题是什么,但我建议您在给定的小部件上调用 QWidget::update()。这会强制下一次更新重新呈现自己。
另一方面,我不确定为什么 toggleColors() 没有以某种方式导致这种情况发生。
此外,确保 QWidget::setUpdatesEnabled(bool) 未设置为 "false."
看来问题出在 QCustomPlot
。它是通过执行特定于 QCustomPlot
而不是 QWidget
.
ui->plot->replot()
解决的