Я работаю над проектом, который представляет данные в реальном времени, полученные в режиме реального времени, с помощью плагина QCustomPlot для Qt. Дисплей имеет черный цвет фона, а несколько каналов данных окрашены по-разному. При съемке снимка мы хотели бы сделать его доступным для печати, поэтому фон белый, а все данные черные. Я имею в виду решение, как это:QApplication :: processEvents не работает в Windows
- Изменить все цвета так, как я хочу, манипулируя указателей для графических объектов
- захватить скриншот с помощью QWidget :: грейфер(), чтобы получить 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.
Update 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'] (http://www.qcustomplot.com/documentation/classQCustomPlot.html#a7636261aff1f6d25c9da749ece3fc8b8)? Я не знаю, как это работает на внутреннем уровне, но, похоже, перерисовывает все, поэтому вам даже не нужно будет вызывать 'QApplication :: processEvents'. Стоит сделать снимок. – thuga