最新国产好看的视频,伊人天堂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 返回的大小,不能完全包含實際圖形大小,導致刷新不全

(2)boundingRect的左上角頂點位置、長寬,未補全畫筆寬度,導致原因同(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);
}

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

相關文章

最新評論

方山县| 开封市| 铅山县| 宁强县| 扎兰屯市| 金山区| 遂昌县| 正镶白旗| 五台县| 壶关县| 中宁县| 买车| 巍山| 景东| 丘北县| 林周县| 长寿区| 仁化县| 山东省| 西乌珠穆沁旗| 肇州县| 东乡族自治县| 灵石县| 三原县| 冕宁县| 泰州市| 南开区| 河南省| 深水埗区| 稻城县| 金湖县| 峨山| 江陵县| 淮阳县| 尖扎县| 溧阳市| 洪江市| 隆子县| 曲阳县| 吉安县| 同德县|