QGraphicsItem绘制重叠区域
生活随笔
收集整理的這篇文章主要介紹了
QGraphicsItem绘制重叠区域
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果如下:
我通過(guò)重寫一個(gè)繼承自QGraphicitem的類來(lái)實(shí)現(xiàn)上述功能,繪制重疊區(qū)域主要通過(guò)QPainterPath來(lái)實(shí)現(xiàn),核心代碼如下:
void myGraphicRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {QPen mPen= QPen(Qt::yellow);painter->setPen(mPen);//繪制旋轉(zhuǎn)后的矩形painter->drawPolygon(m_oldRectPolygon);//繪制旋轉(zhuǎn)圓形mPen.setWidth(2);mPen.setColor(Qt::green);painter->setPen(mPen);QPointF pf = getSmallRotateRectCenter(m_oldRectPolygon[0],m_oldRectPolygon[1]);QRectF rect = QRectF(pf.x()-10,pf.y()-10,20,20);painter->drawEllipse(rect);//繪制圓形painter->drawPoint(pf);//繪制點(diǎn)//有重疊的情況if(!this->scene()->collidingItems(this).isEmpty()){QPainterPath path,pathOthers;QList<QGraphicsItem *> lstcolliItems = this->scene()->collidingItems(this);int nColliNum = lstcolliItems.count();for(int i = 0;i<nColliNum;i++){QGraphicsItem* pTempItem = this->scene()->collidingItems(this)[i];QPainterPath tempPath = pTempItem->shape();tempPath.translate(pTempItem->pos());//轉(zhuǎn)換到view中的坐標(biāo)pathOthers += tempPath;//記錄與本item重疊的item的路徑}path.addPolygon(m_oldRectPolygon);path.translate(this->pos());//轉(zhuǎn)換到view中的坐標(biāo)path &= pathOthers;//計(jì)算重疊部分的路徑pathpath.translate(-this->pos().x(),-this->pos().y());//轉(zhuǎn)換回本Item中的坐標(biāo)QBrush brush(Qt::cyan);mPen.setColor(Qt::blue);painter->setPen(mPen);painter->setBrush(brush);painter->drawPath(path);//繪制重疊區(qū)域} }總結(jié)
以上是生活随笔為你收集整理的QGraphicsItem绘制重叠区域的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网易杭研 java 校招_09网易杭研校
- 下一篇: 这部分代码有没有优化的空间:假如day天