Qt官方案例知识点总结(拖放操作——Drag And Drop Robot )

--------------------------------------------------------------------------------------------------------------------------------

QPixmap轮廓剪裁 

 去掉Pixmap的外围部分,如下:

QPixmap pixmap("./img");
//调用createHeuristicMask(),再调用setMask
pixmap.setMask(pixmap.createHeuristicMask());

效果对比:

 ——》

可以看到以图像内轮廓为边界线,无关的白色区域被抹去了

---------------------------------------------------------------------------------------------------------------------------------

QGraphicsItem中开启拖动QDrag

重写QGraphicsItem的鼠标移动事件,在移动事件中开启拖动

void ColorItem::mouseMoveEvent(QGraphicsSceneMouseEvent * event) {
    //判断拖动距离,使用qt推荐的距离QApplication::startDragDistance()
    if (QLineF(event -> screenPos(), event -> buttonDownScreenPos(Qt::LeftButton))
        .length() < QApplication::startDragDistance()) {
        return;
    }

  	//创建拖动对象
    QDrag * drag = new QDrag(event -> widget());
    //创建数据对象,并设置给本次拖动,这样本次拖动就有数据了
  	QMimeData * mime = new QMimeData;
    drag -> setMimeData(mime);

    QImage image(":/images/head.png");
    mime -> setImageData(image);//可以设置图像数据
  
    mime -> setColorData(color);//颜色数据
  
    mime -> setText(QString("#%1%2%3")
        .arg(color.red(), 2, 16, QLatin1Char('0'))
        .arg(color.green(), 2, 16, QLatin1Char('0'))
        .arg(color.blue(), 2, 16, QLatin1Char('0')));//字符串数据

    QPixmap pixmap(34, 34);
    pixmap.fill(Qt::white);
    drag -> setPixmap(pixmap);//设置拖动过程中在鼠标处显示的图片
    drag->setHotSpot(QPoint(15, 20));//设置鼠标在图片里的位
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值