前幾天看到了一個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,這樣就搞定啦!你也試着做吧!
一個好的東東通常都是一些小的組合起來的,想着這個或許可以實現圖片預覽,你把它拖進去就可以放大放心,還可以上一張,下一張的操作!嗯,感覺不錯!哪天實現一些!