日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt鼠标拖动绘制基本几何图形

發布時間:2025/1/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt鼠标拖动绘制基本几何图形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

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

效果圖

實現

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

關鍵代碼

主場景中有一個父rootItem,在scene中將鼠標或觸控事件傳到rooitem后動態繪制臨時的圖形,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) {//計算圖形繪制區域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函數就是用與創建一個獨立的幾何圖形,通過以下的工廠模式來生成

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; }

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

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())); }

其他圖形類似。

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

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

然后就可以自由拖動啦。

代碼太多, 就不全部列出來了,基本邏輯都很簡單。
代碼下載地址

github下載

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Qt鼠标拖动绘制基本几何图形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜亚洲av永久无码精品 | 91不卡视频 | 97干在线 | 男女性高潮免费网站 | www.久久久精品| 精品人妻一区二区三区蜜桃视频 | 各处沟厕大尺度偷拍女厕嘘嘘 | 国产精品一二三四五 | 日韩精品高清在线 | 午夜网址 | 免费在线播放毛片 | 捆绑无遮挡打光屁股调教女仆 | 深夜老司机福利 | 超碰在线网址 | 在线观看日韩精品 | 91香蕉视频在线 | 久久九九国产视频 | 成人精品一区二区三区 | 国产porn | 一级成人毛片 | 伊人222成人综合网 亚洲日本中文 | 中文日韩在线 | 99产精品成人啪免费网站 | 精品国产一区二区三区日日嗨 | 久久香蕉网 | 免费网站在线观看人数在哪动漫 | 国产粉嫩一区二区三区 | 日韩v欧美| 欧美顶级毛片在线播放 | 绝顶高潮videos合集 | 日韩草逼 | 亚洲第一大网站 | h在线网站 | av免费网站| 亚洲欧美激情一区二区三区 | 成人妇女淫片aaaa视频 | 91九色在线播放 | 污污小视频 | 国产男女猛烈无遮挡a片漫画 | 久久久久毛片 | 美女的奶胸大爽爽大片 | 欧美第九页| 黄在线观看免费 | 成年免费视频黄网站在线观看 | 超碰黑人| 日韩色图一区 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产成人a人亚洲精品无码 在线aa | 亚洲精品一区二区18漫画 | 伊人网亚洲 | 国产69精品久久久久999小说 | 91福利在线导航 | 骚色综合 | 久久久av一区二区三区 | 激情小说激情视频 | 日韩亚洲国产欧美 | 在线观看91视频 | 日本免费一区二区三区四区 | 亚洲福利视频一区二区 | 老司机综合网 | 青青草视频播放器 | 台湾佬美性中文娱乐 | 手机av网 | 亚洲精品无码久久 | 精品乱人伦一区二区三区 | 欧美日韩在线视频免费观看 | 操人在线观看 | 久久人人爽人人爽 | www狠狠 | 欧美激情亚洲综合 | av免费播放网站 | 91最新地址永久入口 | 亚洲性视频网站 | 日本不卡视频在线播放 | 性色免费视频 | 无码国内精品人妻少妇蜜桃视频 | 午夜天堂精品 | 精品国产乱码久久久久久预案 | 日本在线成人 | 天堂伊人 | 亚洲精品久久久久久国 | 91香蕉视频官网 | 国产精品77 | 中国一级特黄毛片大片 | 日韩欧美一区二区三区视频 | 国产精品人人人人 | 亚洲欧美va天堂人熟伦 | 西西人体做爰大胆gogo直播 | 国产成人精品一区二区色戒 | 天天爽av | 欧美性xxxxx极品娇小 | 男阳茎进女阳道视频大全 | 色悠久久综合 | 亚洲av无码久久精品狠狠爱浪潮 | 亚洲理伦电影 | 上床视频在线观看 | 亚洲九九爱 | 日韩视频一区二区三区 | 女人天堂av |