Вручную на примере 3.х.х
Добовляете в свой MainWindow
QPixmap bgPixmap;
Во время инициализации, и при ресайзинге окна рисуете в этом bgPixmap всё что душе угодно с любыми антиалиасингами и т.д.
Ну а Ваш paintEvent() Заменяете на чтото типа:
void MainWindow::paintEvent(QPaintEvent * event )
{
QPainter painter(this);
QRect r = event->rect();
painter.drawPixmap(r.topLeft(), bgPixmap, r);
}
Хмм. Имею вот такой кусок кода:
void TestWidget::paintEvent(QPaintEvent * paintEvent)
{
QPainter painter(this);
draw();
painter.drawPixmap(paintEvent->rect(), bufferPixmap);
painter.end();
}
void TestWidget::draw()
{
bufferPixmap = QPixmap(size());
bufferPixmap.fill(Qt::transparent);
QPainter painter(&bufferPixmap);
painter.setRenderHint(QPainter::Antialiasing, true);
QPolygon polyline;
const int N = 40;
for(int i = 0; i < N; i++)
{
polyline.append(QPoint(i*width()/N, height()*(i%2)));
}
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
painter.drawPolyline(polyline);
}
то есть отрисовка ломаной из 40 линий, геометрия которой задается размерами виджета.
Без антиалиасинга работает ...ну достаточно быстро. С антиалиасингом - жуткие тормоза. Ресайзинг жду секунду/полторы.
Железо - 640 оперативы, ~1900 проц, видюха - geforce4 MX 64Mb
(да и на компе помощнее на работе такой же результат)
Qt 4.2.2 коммерческий.
Кто-нить знает почему так? То есть это баг или фича?
Я вот держу в руках QWT-5 и смотрю на примеры типа realtime_plot, data_plot и cpuplot. Последний с антиалиасингом при таймере на 50 мс летает при резайсинге (то есть перерисовка с нуля выполняется быстро). У меня же все тупит в более элементарном случае.
Может кто подскажет, какие такие хитрости используются в QWT (которые я может упустил, когда пробегал исходники) ?