国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt QGraphicsItem獲取鼠標位置對應(yīng)圖像坐標

這篇具有很好參考價值的文章主要介紹了Qt QGraphicsItem獲取鼠標位置對應(yīng)圖像坐標。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本次使用了QGraphicsView來加載圖像,然后給其設(shè)置了一個QGraphicsScene場景,再給場景添加了一個自定義的QGraphicsItem,在其中重寫了paint事件,用來重繪圖像。


正常情況時,QGraphicsItem上圖像的有效區(qū)域QRect大小和QGraphicsView一致,此時正好鋪滿,鼠標位置的坐標可以比較輕松的推算出其在圖像有效區(qū)域的全局坐標。
當個人碰到的某些時候,QGraphicsItem上圖像的有效區(qū)域QRect大小并不和QGraphicsView一致,比如寬度留白了,即左右兩邊有空缺。此時發(fā)現(xiàn)如果用正常的方法去獲取鼠標位置坐標在圖像有效區(qū)域的全局坐標,會得到不準確的坐標。明明是鼠標在圖像的頂點,卻可能x坐標或y坐標不從0開始。

qt 獲取在qgraphicsitem的位置,qt,opencv


針對這種情況,使用以下幾句可以得到鼠標位置在圖像有效區(qū)域的全局坐標。
class ImgShow : public QObject, public QGraphicsItem
{
    Q_OBJECT
public:
    ImgShow(QRectF rect);
    ~ImgShow() override;

    void UpdateImageRect(QRectF rect);
    void UpdateImageShow(QPixmap pix);

protected:
    virtual QRectF boundingRect() const override;

    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;

    void hoverMoveEvent(QGraphicsSceneHoverEvent* event);

private:
    QRectF curRect;
    QPixmap curPix;
    QMutex mtx;
};

cpp文章來源地址http://www.zghlxwxcb.cn/news/detail-815033.html


ImgShow::ImgShow(QRectF rect)
{
    curRect = rect;
    //使其在鼠標未點擊也能響應(yīng)懸停事件
    setAcceptHoverEvents(true);
}

ImgShow::~ImgShow()
{

}


void ImgShow::UpdateImageRect(QRectF rect)
{
    mtx.lock();
    curRect = rect;
    mtx.unlock();
}

void ImgShow::UpdateImageShow(QPixmap pix)
{
    mtx.lock();
    curPix = pix;
    mtx.unlock();
    // 設(shè)置玩圖像數(shù)據(jù)后刷新圖像
    QGraphicsView * view = this->scene()->views().at(0);
    view->viewport()->update();
}

QRectF ImgShow::boundingRect() const
{
    return curRect;
}

void ImgShow::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    mtx.lock();
//    painter->drawPixmap(-static_cast<int>(curRect.width() / 2), -static_cast<int>(curRect.height() / 2), curPix);
    //上面的drawPixmap起始位置不太一樣
    painter->drawPixmap(curRect.toRect(), curPix);
    qDebug()<< curRect.width() << curRect.height();
    mtx.unlock();
}


void ImgShow::hoverMoveEvent(QGraphicsSceneHoverEvent* event)
{
    QPointF localPos = event->pos(); // 當前鼠標位置相對于圖元坐標系的坐標
    QRectF imageRect = mapRectToScene(boundingRect()); // 圖像有效區(qū)域在場景中的位置
    QPointF globalPos = scenePos() + localPos - imageRect.topLeft(); // 轉(zhuǎn)換為圖像有效區(qū)域的全局坐標
    qDebug()<< globalPos;
}

//scenePos()為圖元在場景的坐標,因此 scenePos() + localPos 為鼠標在場景坐標系的坐標
//imageRect.topLeft()為圖像有效區(qū)域的左上角在圖元坐標系的位置,因此 localPos - imageRect.topLeft() 為當前鼠標事件在圖片局部坐標系中的位置

當圖像的有效區(qū)域并不是鋪滿圖元時,就可以用該方式得到,當前鼠標位置對于圖像有效區(qū)域的全局坐標

到了這里,關(guān)于Qt QGraphicsItem獲取鼠標位置對應(yīng)圖像坐標的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • QT基礎(chǔ):event 函數(shù)重載、篩選鼠標按壓事件、獲取鼠標位置、右鍵顯示菜單、修改鼠標樣式功能演示

    QT基礎(chǔ):event 函數(shù)重載、篩選鼠標按壓事件、獲取鼠標位置、右鍵顯示菜單、修改鼠標樣式功能演示

    這里演示的是QT基礎(chǔ),主要包含: event 函數(shù)重載、篩選鼠標按壓事件、獲取鼠標位置、右鍵顯示菜單、修改鼠標樣式等功能演示, 適合初學(xué)者食用 。 演示功能:點擊鼠標左鍵、右鍵、中鍵、左右鍵同時點擊,輸出鼠標當前坐標;按下鼠標中鍵,鼠標樣式被替換,按下鼠標左

    2024年02月09日
    瀏覽(22)
  • 【Qt圖形視圖框架】自定義QGraphicsItem和QGraphicsView,實現(xiàn)鼠標(移動、縮放)及鍵盤事件、右鍵事件

    說明 在使用Qt的圖形視圖框架實現(xiàn)功能時,一般會在其基礎(chǔ)上進行自定義功能實現(xiàn)。 如:滾輪對場景的縮放,鼠標拖動場景中的項,以及可以在場景中進行右鍵操作等。 示例 myitem 為自定義QGraphicsItem,實現(xiàn)了邊框、重繪事件、鼠標懸停、按鍵、右鍵菜單等功能。 myitem.h myi

    2024年02月04日
    瀏覽(32)
  • QT編寫實現(xiàn)圖片的幻燈片播放、自適應(yīng)顯示、縮放(以鼠標位置為中心進行縮放)、拖動、重置、顯示鼠標位置像素坐標及RGB值、播放GIF動畫、截圖保存、批量保存、拖入文件夾遍歷所有文件

    QT編寫實現(xiàn)圖片的幻燈片播放、自適應(yīng)顯示、縮放(以鼠標位置為中心進行縮放)、拖動、重置、顯示鼠標位置像素坐標及RGB值、播放GIF動畫、截圖保存、批量保存、拖入文件夾遍歷所有文件

    這個圖片查看器功能很多,是我花了不少心思,不斷優(yōu)化,不斷添加功能的成果: 1.能打開并顯示所有常用圖片格式文件,顯示鼠標位置像素坐標及RGB值 2.能縮放,拖動圖片,可以以鼠標為中心滾動滾輪進行縮放 3.右擊可彈出菜單欄,菜單包括:適應(yīng)寬度,適應(yīng)窗口,原圖大

    2024年02月10日
    瀏覽(39)
  • C# 獲取鼠標在屏幕中的位置(獲取鼠標坐標)

    近段時間需要一個鼠標點擊器,目前能找到的都不太符合使用要求,所以就準備自己寫一個 如果需要顯示文本就把int轉(zhuǎn)換成string. 如果需要顯示到窗體上可以把int轉(zhuǎn)換成string 如果需要實時獲取位置信息可以把GetMousePose()方法放到Timer定時器或者Thread子線程 具體如何選擇看自己的

    2024年02月08日
    瀏覽(23)
  • UE獲取當前鼠標點擊位置坐標

    UE獲取當前鼠標點擊位置坐標

    獲取當前 鼠標點擊位置的UE世界坐標 (x,y,z),效果如下圖所示(為便于演示,下圖顯示了碰撞點位)。 2.1 藍圖代碼 (1) 核心函數(shù) 的藍圖代碼如下: (2)當鼠標左鍵按下時,調(diào)用函數(shù),當前鼠標點擊位置將會被打印在屏幕上。

    2024年02月09日
    瀏覽(24)
  • C# GDAL 數(shù)字圖像處理Part4 獲得鼠標位置的地理坐標

    ? ? ? ? 其實在程序設(shè)計中,很大部分的工作量都在搞懂Winform的各種控件及其接口,網(wǎng)上的講解質(zhì)量也良莠不齊,所以如何使用控件也是一個很苦惱的問題(舍友深受困擾:怎么沒有系統(tǒng)性講Winform的資料)。我也在考慮要不要寫一下文章講講comboBox、listView、tabControl、pictureBo

    2024年02月10日
    瀏覽(28)
  • Qt鼠標拖動控件交換布局位置

    方法很簡單,交換鼠標起點控件指針和鼠標落點控件指針的值,然后重新布局 Qt鼠標拖動控件交換布局位置 源文件 頭文件 下面是只交換控件顯示的內(nèi)容: 添加鼠標貼圖,跟隨鼠標移動: 一種實現(xiàn):重寫void paintEvent(QPaintEvent *event);方法 另一種實現(xiàn):

    2024年02月11日
    瀏覽(25)
  • Qt鼠標點擊事件處理:顯示鼠標點擊位置(完整示例)

    Qt鼠標點擊事件處理:顯示鼠標點擊位置(完整示例)

    Qt 入門實戰(zhàn)教程(目錄) 前驅(qū)文章: Qt Creator 創(chuàng)建 Qt 默認窗口程序(推薦) 事件是對各種應(yīng)用程序需要知道的由應(yīng)用程序內(nèi)部或者外部產(chǎn)生的事情或者動作的通稱。 例如點擊鼠標,按下按鍵。 在Qt中使用一個對象來表示一個事件,它繼承自QEvent類。 如鼠標事件(例如點擊

    2024年02月10日
    瀏覽(24)
  • Qt音視頻開發(fā)37-識別鼠標按下像素坐標

    在和視頻交互過程中,用戶一般需要在顯示視頻的通道上點擊對應(yīng)的區(qū)域,彈出對應(yīng)的操作按鈕,將當前點擊的區(qū)域或者繪制的多邊形區(qū)域坐標或者坐標點集合,發(fā)送出去,通知其他設(shè)備進行處理。比如識別到很多人臉,用戶單擊某個人臉后指定對該人臉進行詳細的信息查詢

    2023年04月16日
    瀏覽(21)
  • Qt/C++音視頻開發(fā)37-識別鼠標按下像素坐標

    在和視頻交互過程中,用戶一般需要在顯示視頻的通道上點擊對應(yīng)的區(qū)域,彈出對應(yīng)的操作按鈕,將當前點擊的區(qū)域或者繪制的多邊形區(qū)域坐標或者坐標點集合,發(fā)送出去,通知其他設(shè)備進行處理。比如識別到很多人臉,用戶單擊某個人臉后指定對該人臉進行詳細的信息查詢

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包