获取 QPainter 的可见区域

Posted

技术标签:

【中文标题】获取 QPainter 的可见区域【英文标题】:Get visible area of QPainter 【发布时间】:2014-03-07 19:38:17 【问题描述】:

我在QScrollArea 中有一个所有者绘制的QWidget,所以在绘画时,我只想绘制可见的部分。为此,我需要有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) 

如您所见,这些函数都没有给出实际的可见区域,我如何得到它?

【问题讨论】:

查看QPaintEvent,您将获得它作为方法参数。 @hyde OMG 你是对的! QPaintEvent::rect() 正是我所需要的。谢谢,这回答了我的问题,您可以将其发布为答案,我会接受。 YW。请随意接受 Laszlo 的回答。 【参考方案1】:

我会试试这个:

...
    setMinimumHeight(3000);
    setMinimumWidth(3000);

void MyWidget::paintEvent(QPaintEvent *paintEvent)

    qDebug() << paintEvent.rect();
...

详情请参阅documentation。

【讨论】:

以上是关于获取 QPainter 的可见区域的主要内容,如果未能解决你的问题,请参考以下文章

如何在paintEvent之外获取QPainter的字体度量?

QPainter 仅在 QImage 上绘制矩形的一部分

Qt 绘图问题,急急急!

使用 QPainter 绘图

QPainter 性能高帧率

设置 QPainter 背景