Я работаю над проектом, который представляет данные в реальном времени, полученные в режиме реального времени с помощью подключаемого модуля QCustomPlot для Qt. Дисплей имеет черный цвет фона, а несколько каналов данных окрашены по-разному. Делая снимок экрана, мы хотели бы сделать его удобным для печати, чтобы фон был белым, а все данные — черными. Я думаю о таком решении:
- Измените все цвета так, как я хочу, манипулируя указателями графических объектов.
- Сделайте снимок экрана с помощью 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()
.
QCustomPlot::savePng
? Я не знаю, как это на самом деле работает внутри, но кажется, что он перерисовывает все, поэтому вам может даже не понадобиться вызыватьQApplication::processEvents
. Стоит попробовать. - person thuga   schedule 05.08.2015