欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++友元函數(shù)和友元類的使用與區(qū)別

    C++友元函數(shù)和友元類的使用與區(qū)別

    本文主要介紹了C++友元函數(shù)和友元類的使用與區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)

    C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)

    這篇文章主要介紹了C語言數(shù)據(jù)結構之順序數(shù)組的實現(xiàn)的相關資料,這里提供實現(xiàn)實例,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • 詳解C語言中的#define宏定義命令用法

    詳解C語言中的#define宏定義命令用法

    有的時候為了程序的通用性,可以使用#define預處理宏定義命令,它的具體作用就是方便程序段的定義和修改,下面就來詳解C語言中的#define宏定義命令用法.
    2016-05-05
  • C++超詳細講解函數(shù)對象

    C++超詳細講解函數(shù)對象

    在c++中,我們把所有能當作函數(shù)使用的對象統(tǒng)稱為函數(shù)對象。它是實現(xiàn)operator()的任何類型,此運算符被稱為調(diào)用運算符,當調(diào)用此操 作符時,其表現(xiàn)形式如同普通函數(shù)調(diào)用一般,因此取名叫函數(shù)對象
    2022-06-06
  • C語言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對比

    C語言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對比

    這篇文章主要介紹了C語言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對比,分別用于讀取組格式函數(shù)和讀取密碼格式,需要的朋友可以參考下
    2015-08-08
  • 詳解C++中的數(shù)據(jù)抽象

    詳解C++中的數(shù)據(jù)抽象

    這篇文章主要介紹了詳解C++中的數(shù)據(jù)抽象,數(shù)據(jù)抽象是指,只向外界提供關鍵信息,并隱藏其后臺的實現(xiàn)細節(jié),即只表現(xiàn)必要的信息而不呈現(xiàn)細節(jié),需要的朋友可以參考下
    2023-05-05
  • C語言返回值指針的函數(shù)詳解

    C語言返回值指針的函數(shù)詳解

    這篇文章主要為大家詳細介紹了C語言返回值指針的函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言線性表順序表示及實現(xiàn)

    C語言線性表順序表示及實現(xiàn)

    這篇文章主要介紹了C語言線性表順序表示及實現(xiàn),線性表是最常用且最簡單的一種數(shù)據(jù)結構。簡而言之,一個線性表是n個數(shù)據(jù)元素的有限序列
    2022-07-07
  • 一篇文章帶你入門C語言:數(shù)組

    一篇文章帶你入門C語言:數(shù)組

    這篇文章主要介紹了C語言中數(shù)組的一些基本知識小結,其中重點是對于數(shù)組的內(nèi)存分配相關方面的知識整理,需要的朋友可以參考下
    2021-08-08
  • C語言中的初階指針詳解

    C語言中的初階指針詳解

    這篇文章主要介紹了C語言中的初階指針,介紹了其相關概念,具有一定參考價值。需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-10-10

最新評論