最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt?QGraphicsItem?移動時出現(xiàn)殘影問題記錄

 更新時間:2024年06月20日 11:13:18   作者:求知向道  
自定義QGraphicsItem時,繪制rect,對象移動時出現(xiàn)殘影的問題記錄,本文給大家介紹Qt?QGraphicsItem?移動時出現(xiàn)殘影問題記錄,感興趣的朋友跟隨小編一起看看吧

1.問題現(xiàn)象

自定義 QGraphicsItem 時,繪制rect,對象移動時出現(xiàn)殘影。

ec04162f14e34ac48f9dd191f6293d20.png

2.問題原因

直接原因是view未刷新的問題,所以網(wǎng)上有人使用方案  setViewportUpdateMode(QGraphicsView::FullViewportUpdate); 的方案,但當圖片過多時,此方案會造成畫面閃爍,耗費資源等問題。

而根本原因是,boundingRect返回大小的問題,存在兩種情況:

(1)boundingRect 返回的大小,不能完全包含實際圖形大小,導(dǎo)致刷新不全

(2)boundingRect的左上角頂點位置、長寬,未補全畫筆寬度,導(dǎo)致原因同(1)

boundingRect函數(shù)功能,是將圖形項的外部邊界定義為一個矩形。所有的繪圖操作都必須限制在圖形的邊界矩形中,QGraphicsView需要使用這個邊界來確定重繪的區(qū)域。

而邊界的寬度,精確為畫筆寬度的的一半。

3.修改方案

boundingRect的左上角頂點,需要補充畫筆寬度/2,實際矩形的長寬,補全畫筆寬度

QRectF CGraphicsDragItem::boundingRect() const
{
    return QRectF(
        -m_penWidth/2,
        -m_penWidth/2,
        m_rectWidth+m_penWidth,
        m_rectHeight+m_penWidth);
}
void CGraphicsDragItem::paint(
    QPainter *painter,
    const QStyleOptionGraphicsItem *option,
    QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    if (hasFocus() || !collidingItems().isEmpty())
    {
        m_penWidth = 10;
        painter->setPen(QPen(QColor(255, 255, 255, 200), m_penWidth));
        if (hasFocus())
        {
            for (auto it : collidingItems())
            {
                it->update();
            }
        }
    }
    else
    {
        m_penWidth = 1;
        painter->setPen(QPen(QColor(100, 100, 100, 100), m_penWidth));
    }
    painter->setBrush(m_clrBrush);
    painter->drawEllipse(0, 0, m_rectWidth, m_rectHeight);
}

到此這篇關(guān)于Qt QGraphicsItem 移動時出現(xiàn)殘影問題記錄的文章就介紹到這了,更多相關(guān)Qt QGraphicsItem 移動殘影內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

焦作市| 岳阳县| 新巴尔虎右旗| 新营市| 巴林右旗| 阿坝县| 志丹县| 九龙城区| 河南省| 读书| 枣庄市| 舞阳县| 新宁县| 钟山县| 黔东| 定边县| 西青区| 海宁市| 锦屏县| 高平市| 成安县| 明光市| 余江县| 内丘县| 淄博市| 秦皇岛市| 织金县| 文水县| 临潭县| 东平县| 澜沧| 浦县| 临海市| 万安县| 汾阳市| 湘潭县| 镇沅| 桃源县| 崇左市| 久治县| 张家口市|