Я использую плиточную систему рендеринга (чтобы избежать ограничения GL_MAX_VIEWPORT_DIMS
).Мне нужно поддерживать оверлеи QWidget
и для этого нужно также реализовать мозаичный рендеринг для виджетов.План состоит в том, чтобы создать QPainter
с правильными преобразованиями и вызвать QWidget::render
с "преобразованным" QPainter
.
У меня есть некоторый тест-код для этого:
int w = 24;
int h = 24;
QImage tiles[4];
QPushButton btn;
btn.resize(w, h);
btn.move(w/2, h/2);
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
int tileidx = i + 2*j;
tiles[tileidx] = QImage(QSize(w, h), QImage::Format_ARGB32);
tiles[tileidx].fill(0);
QPainter painter(&tiles[tileidx]);
painter.setViewport(i*w,i*h, w,h); // or setWindow()
painter.save();
painter.translate(btn.pos());
btn.render(&painter);
painter.restore();
}
}
for (int i = 0; i < 4; ++i) {
tiles[i].save(QString("c:/temp/tile%0.bmp").arg(i));
}
Я бы ожидал, что одна четвертая кнопки будет отображаться в каждом тайле, но результат будет совершенно другим:
Номера плиток:
0 2
1 3
Как правильно настроить QPainter (или добиться того, что мне нужно)?