前几天看到了一个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,这样就搞定啦!你也试着做吧!
一个好的东东通常都是一些小的组合起来的,想着这个或许可以实现图片预览,你把它拖进去就可以放大放心,还可以上一张,下一张的操作!嗯,感觉不错!哪天实现一些!