• 大小: 240KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: Qt  QGraphicsSce  

资源简介

CustomSense继承QGraphicsScene,QGraphicsView,重写了鼠标事件,在CustomSense上添加图片并画矩形标记出特定区域,是专门满足这个需求写的小测试例子,使用Qt5实现。

资源截图

代码片段和文件信息

#include “customsense.h“
#include “ui_customsense.h“

#include 
#include 
#include 



CustomScene::CustomScene(){
    item = new QGraphicsRectItem();
    addItem(item);
}

// 自定义 Scene
void CustomScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug() << “Custom scene clicked.“;
    QGraphicsScene::mousePressEvent(event);
    if (!event->isAccepted()) {
        if (event->button() == Qt::LeftButton) {
            // 在 Scene 上添加一个自定义 item
            QPointF point = event->scenePos();
            startPoint = point;
            qDebug()<<“startPoint:“<            isDrawing = true;
        } else if (event->button() == Qt::RightButton) {
            // 检测光标下是否有 item
            QGraphicsItem *itemToRemove = NULL;
            foreach (QGraphicsItem *item items(event->scenePos())) {
                if (item->type() == QGraphicsRectItem::Type) {
                    itemToRemove = item;
                    break;
                }
            }
            // 从 Scene 上移除 item
            if (itemToRemove != NULL)
                removeItem(itemToRemove);
        }
    }
}

void CustomScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QGraphicsScene::mouseMoveEvent(event);
    if(event->buttons()&Qt::LeftButton)  //如果鼠标左键按着的同时移动鼠标
    {
        qDebug() << “Custom scene moved.“;

        QPointF point = event->scenePos();
        endPoint = point;

        if(endPoint.x()- startPoint.x()>20&&endPoint.y()- startPoint.y()>20)
        {
            removeItem(item);
            QPen p;
            p.setWidth(2);
            p.setColor(QColor(0 160 230));
            item->setPen(p);
            item->setRect(startPoint.x() startPoint.y() endPoint.x()-startPoint.x() endPoint.y()-startPoint.y());
            addItem(item);
        }
    }
}

void CustomScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)  //如果鼠标左键按着的同时移动鼠标
    {
        QGraphicsScene::mouseMoveEvent(event);
        qDebug() << “Custom scene release.“;
        QPointF point = event->scenePos();
        endPoint = point;
        qDebug()<<“endPoint:“<    }
}

void CustomScene::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_Backspace) {
        // 移除所有选中的 items
        qDebug() << “selected items “ << selectedItems().size();
        while (!selectedItems().isEmpty()) {
            removeItem(selectedItems().front());
        }
    } else {
        QGraphicsScene::keyPressEvent(event);
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-20 09:29  CustomSence\
     文件        2765  2018-11-20 09:28  CustomSence\customsense.cpp
     文件         683  2018-11-20 09:28  CustomSence\customsense.h
     文件        1092  2018-11-20 09:27  CustomSence\CustomSense.pro
     文件       23894  2018-11-20 09:29  CustomSence\CustomSense.pro.user
     文件        1471  2018-11-16 14:28  CustomSence\customsense.ui
     文件      239553  2018-11-19 13:35  CustomSence\image.jpg
     文件          93  2018-11-16 16:27  CustomSence\image.qrc
     文件         466  2018-11-20 09:29  CustomSence\main.cpp

评论

共有 条评论