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

Qt鼠標拖動繪制基本幾何圖形

這篇具有很好參考價值的文章主要介紹了Qt鼠標拖動繪制基本幾何圖形。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概述

用Qt鼠標事件實現(xiàn)基本幾何圖形的繪制,支持直線、矩形、圓形、橢圓。后期可以在此基礎上進行擴展。

效果圖

qt 鼠標繪制矩形,qt,Powered by 金山文檔

實現(xiàn)

本示例使用QGraphics體系來實現(xiàn),因為要移動對象,所以生成的圖形必須是一個單獨的對象,鼠標拖動繪制的過程是在臨時層中完成,release后生成一個矢量的圖形item并添加到場景中。

關鍵代碼

主場景中有一個父rootItem,在scene中將鼠標或觸控事件傳到rooitem后動態(tài)繪制臨時的圖形,release事件后生成一個標準的圖形對象:

本示例使用QGraphics體系來實現(xiàn),因為要移動對象,所以生成的圖形必須是一個單獨的對象,鼠標拖動繪制的過程是在臨時層中完成,release后生成一個矢量的圖形item并添加到場景中。

關鍵代碼

主場景中有一個父rootItem,在scene中將鼠標或觸控事件傳到rooitem后動態(tài)繪制臨時的圖形,release事件后生成一個標準的圖形對象:

void GsRootItem::drawPress(int id, const QPointF &p)
{
    ShapeInfo info;
    info.firstPos = p;
    info.type = getCurType();
    m_Objs.insert(id,info);
}

void GsRootItem::drawMove(int id, const QPointF &lastPoint, const QPointF &curPoint)
{
    if(!m_Objs.contains(id)){
        return;
    }
    ShapeInfo info = m_Objs.value(id);
    m_pTempLayer->drawShape(info.type,info.firstPos,curPoint);
}

void GsRootItem::drawRelease(int id, const QPointF &point)
{
    if(!m_Objs.contains(id)){
        return;
    }
    ShapeInfo info = m_Objs.value(id);
    drawRealShape(info.type,info.firstPos,point);
    m_Objs.remove(id);
    m_pTempLayer->clear();
}

...
void GsRootItem::drawRealShape(GsShapeType type, QPointF p1, QPointF p2)
{
    //計算圖形繪制區(qū)域
    QRectF rect;
    rect.setX(qMin(p1.x(),p2.x()));
    rect.setY(qMin(p1.y(),p2.y()));
    if(type == Shape_Circle){
        rect.setWidth(qAbs(p1.y() - p2.y()));
        rect.setHeight(qAbs(p1.y() - p2.y()));
    }
    else{
        rect.setWidth(qAbs(p1.x() - p2.x()));
        rect.setHeight(qAbs(p1.y() - p2.y()));
    }
    rect.adjust(-5,-5,5,5);
    GsShapeBaseItem * item = m_pShapeFactory->getShapeItem(type,rect,this);
    item->drawShape(p1,p2);
}

drawRealShape函數(shù)就是用于創(chuàng)建一個獨立的幾何圖形,通過以下的工廠模式來生成

 GsShapeBaseItem * item = m_pShapeFactory->getShapeItem(type,rect,this);

工廠代碼:

GsShapeBaseItem *GsShapeFactory::getShapeItem(GsShapeType type,QRectF rectF,
                                              QGraphicsObject *parent)
{
    GsShapeBaseItem * item = nullptr;
    switch (type) {
    case Shape_Line:
        item = new GsShapeLineItem(rectF,parent);
        break;
    case Shape_Rectange:
        item = new GsShapeRectangeItem(rectF,parent);
        break;
    case Shape_Circle:
        item = new GsShapeCircleItem(rectF,parent);
        break;
    case Shape_Oval:
        item = new GsShapeOvalItem(rectF,parent);
        break;
    default:
        break;
    }
    item->setZValue(10);
    return item;
}

在工廠類中會創(chuàng)建不同的圖形對象。每一個圖形對象是繼承于QGraphicsObject然后重寫paint函數(shù)去進行繪制,比如說原型:

void GsShapeCircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setRenderHint(QPainter::Antialiasing);
    QColor color = Qt::red;//(rand()%255,rand()%255,rand()%255);
    painter->setBrush(color);
    if(m_bTap){
        painter->setPen(QPen(Qt::yellow,5,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
    }
    else{
        painter->setPen(QPen(color,3,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
    }
    painter->drawEllipse(m_firstPoint.x(),m_firstPoint.y(),
                         qAbs(m_lastPoint.y() - m_firstPoint.y()),
                         qAbs(m_lastPoint.y() - m_firstPoint.y()));
}

其他圖形類似。

實現(xiàn)圖形的選擇和拖動,需要在item中添加以下兩句:

setFlag(ItemIsSelectable,true);
setFlag(ItemIsMovable,true);

然后就可以自由拖動啦。

基本邏輯都很簡單。文章來源地址http://www.zghlxwxcb.cn/news/detail-645755.html

到了這里,關于Qt鼠標拖動繪制基本幾何圖形的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • SVG的一些基礎知識,包括SVG坐標系統(tǒng)、支持的幾何圖形和樣式,動畫的基礎知識,包括基本動畫和路徑動畫

    SVG(可縮放矢量圖形)是一種使用XML格式定義的圖像格式,它可以將二維圖像呈現(xiàn)為任意大小的圖像,而不會產生像素化。由于它的矢量設計,SVG成為了實現(xiàn)各種圖形和動畫的理想平臺。在本文中,我們將探討如何使用SVG實現(xiàn)圖形和動畫。 在開始之前,讓我們首先了解一下

    2024年02月03日
    瀏覽(24)
  • Qt中QGraphicsView架構下實時鼠標繪制圖形

    Qt中QGraphicsView架構下實時鼠標繪制圖形

    上一章節(jié)介紹了關于QGraphicsView的基礎講解,以及簡單的類圖創(chuàng)建,由上一章節(jié)中最后展示的動畫效果來看,今年主要講述如何在QGraphicsView架構下,實時拖動鼠標繪制圖形! 今天主要以矩形為例,再來看一下展示效果吧! 想要實現(xiàn)鼠標拖拽繪圖的效果,離不開鼠標的三大事件

    2024年01月22日
    瀏覽(31)
  • Qt—QPainter基本圖形繪制詳解

    Qt—QPainter基本圖形繪制詳解

    1、QPainter 類在小部件和其他繪制設備上執(zhí)行低級繪制。 2、QPainter 提供了高度優(yōu)化的功能來完成大多數(shù)圖形GUI程序所需的工作。它可以畫從簡單的線條到復雜的形狀。它還可以繪制對齊的文本和像素圖。QPainter 可以對繼承 QPaintDevice 類的任何對象進行操作。 3、QPainter 與 QPai

    2024年02月02日
    瀏覽(28)
  • 【matplotlib基礎】--幾何圖形

    【matplotlib基礎】--幾何圖形

    除了繪制各類分析圖形(比如柱狀圖,折線圖,餅圖等等)以外, matplotlib 也可以在畫布上任意繪制各類幾何圖形。 這對于計算機圖形學、幾何算法和計算機輔助設計等領域非常重要。 matplitlib 中的 patches 類提供了豐富的幾何對象, 本篇拋磚引玉,介紹其中幾種常用的幾何

    2024年02月08日
    瀏覽(18)
  • PostGIS:幾何圖形輸出

    5.9.1. Well-Known Text (WKT) 5.9.1.1. ST_AsEWKT ST_AsEWKT -返回具有SRID元數(shù)據的幾何體的已知文本(WKT)表示。 5.9.1.1.1. 概要 5.9.1.1.2. 描述 返回以SRID為前綴的幾何圖形的知名文本表示形式??蛇x參數(shù)可用于減少輸出中使用的浮點數(shù)后的最大十進制位數(shù)(默認為15)。 此函數(shù)支持3d,并且不會刪

    2024年02月16日
    瀏覽(19)
  • 計算機圖形學:二維圖形的幾何變換(算法原理及代碼實現(xiàn))

    計算機圖形學:二維圖形的幾何變換(算法原理及代碼實現(xiàn))

    對于一個二維圖形作平移、旋轉、放縮變換,可以轉換為在二維坐標系中圖形的所有點分別可以對應到在x,y軸方向分別平移tx,ty(平移)、繞一點旋轉固定的角(旋轉)、在x,y軸方向分別放縮sx,sy倍。 對于變換的原理,只需要將原圖形的點通過極坐標或者相加、相乘,再

    2024年02月11日
    瀏覽(94)
  • 圖形幾何學——圓形:圓弧與曲率

    圖形幾何學——圓形:圓弧與曲率

    A、B、C分別是參考線的某三個連續(xù)的離散點,abc分別是其對邊。根據三角形外接圓相關性質,通過作三條邊的中垂線的交點可以求得三角形的外接圓心。連接CO并延長交圓周于點D,由于 近似認為 ∣ P 1 ? ∣ = ∣ P 2 P 3 ? ∣ = d s |vec{P_1}| = |vec{P_2P_3}| = ds ∣ P 1 ? ? ∣ = ∣

    2024年04月27日
    瀏覽(26)
  • Procedural Mesh: 創(chuàng)建復雜的3D幾何圖形

    Procedural Mesh 是一個用于創(chuàng)建復雜3D幾何圖形的開源庫,由 Morten Nobel 開發(fā)并維護。它允許開發(fā)者通過程序化的方式生成各種形狀和結構,無需手動設計每個頂點和面。 Procedural Mesh 提供了一系列函數(shù)和工具,可以幫助開發(fā)者輕松地生成自定義的3D網格。這些功能包括: 基礎形狀

    2024年03月15日
    瀏覽(39)
  • 幾何引擎 & 約束求解器 & 3D仿真物理引擎 & 圖形引擎

    幾何引擎 & 約束求解器 & 3D仿真物理引擎 & 圖形引擎

    四大技術圖譜就像四座護法金剛,形成了深不可測的技術鴻溝。這對于任何一個工業(yè)軟件企業(yè),十年發(fā)展的沉淀,那還只是開始。這條路,太漫長了。 Software Vendor Domain 3D-kernel 4MCAD IntelliCAD 4M S.A., Greece CAD, AEC Open CASCADE Technology Adams MSC Software, USA CAE Parasolid ADEM ADEM, Russia-Israel

    2024年02月08日
    瀏覽(47)
  • 計算機視覺 圖像形成 幾何圖形和變換 3D到2D投影

    ????????現(xiàn)在我們知道如何表示2D和3D幾何圖元以及如何在空間上轉換它們,我們需要指定如何將 3D圖元投影到圖像平面上。 我們可以使用線性3D到2D投影矩陣來做到這一點。最簡單的模型是正交法,它不需要除法就可以得到最終的(不均勻的)結果。更常用的模型是透視,

    2023年04月08日
    瀏覽(100)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包