У меня есть владелец QWidget
внутри QScrollArea
, поэтому при рисовании хочу рисовать только те части, которые видны. Для этого мне нужно иметь прямоугольник видимой области QPainter
,
Единственными кандидатами были QPainter::viewport()
, QPainter::window()
, а также QPainter::clipBoundingRect()
, поэтому я поместил этот код для регистрации их вывода:
setMinimumHeight(3000);
setMinimumWidth(3000);
}
void MyWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
qDebug() << painter.viewport() << painter.window() << painter.clipBoundingRect();
Затем я переместил горизонтальную и вертикальную полосы прокрутки, но записанный вывод был странным:
QRect(0,0 3000x3000) QRect(0,0 3000x3000) QRectF(-21,-21 0x0)
QRect(0,0 3000x3000) QRect(0,0 3000x3000) QRectF(-1,-21 0x0)
QRect(0,0 3000x3000) QRect(0,0 3000x3000) QRectF(-1,-1 0x0)
Как вы видите, ни одна из этих функций не дает реальной видимой области, как мне ее получить?
Я бы попробовал это вместо этого:
...
setMinimumHeight(3000);
setMinimumWidth(3000);
}
void MyWidget::paintEvent(QPaintEvent *paintEvent)
{
qDebug() << paintEvent.rect();
...
Увидеть документация для деталей.
Других решений пока нет …