Qt应用程序换肤操作(拖动图片)

前几天看到了一个demo,它将的是通过你在文件夹里拖一张图片到QLabel中,那个图片就在label中显示了,就把那代码看了下,感觉很不错!正好当时也在弄皮肤的东东,想想这个结合在一起也是很不错的!所以就试着写点东西。

主要是用到的两个事件:一个拖动进入事件QDragEnterEvent,还有一个是落下的事件QDropEvent

当然还有一个前提条件就是能够接受这个事件setAcceptDrops(true);

然后只需要在俩个事件中做好相对的处理就可以搞定啦!

在这里个人感觉最终要的是获得图片的路径,只要路径到手啦!其他的事自然就是水到渠成啦!

         

ok,直接上代码吧!

这里贴出一些重要的代码!

首先是构造函数中

    setFixedSize(400,400);
    this->setAcceptDrops(true);//这个是前提
    setWindowFlags(Qt::FramelessWindowHint);
然后是对俩个事件的处理啦!

1,拖动进入事件的处理

void dropWidget::dragEnterEvent(QDragEnterEvent *event)
{
    event->acceptProposedAction();
}
2,下降事件处理

void dropWidget::dropEvent(QDropEvent *event)
{
    //这是放下事件
    qDebug()<<"event->type() == QEvent::Drop";
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty())
    {
        return;
    }
    bgImage = urls.first().toLocalFile();
}
3,将我们获得的bgImage在我们的背景中画出来,所以需要PaintEvent

void dropWidget::paintEvent(QPaintEvent *)
{
    QBrush brush;
    QImage image(bgImage);
    if(image.width() < this->width() && image.height() < this->height())
    {
         brush.setTextureImage(image.scaled(size()));//
    }
    else
    {
        brush.setTextureImage(image);
    }

   QPainter painter(this);
   painter.setBrush(brush);
   painter.setPen(QColor(255,255,255,255));
   painter.drawRoundedRect(QRect(0,0,width()-1,height()-1),3,3);
}

ok,这样就搞定啦!你也试着做吧!

一个好的东东通常都是一些小的组合起来的,想着这个或许可以实现图片预览,你把它拖进去就可以放大放心,还可以上一张,下一张的操作!嗯,感觉不错!哪天实现一些!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值