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,這樣就搞定啦!你也試着做吧!

一個好的東東通常都是一些小的組合起來的,想着這個或許可以實現圖片預覽,你把它拖進去就可以放大放心,還可以上一張,下一張的操作!嗯,感覺不錯!哪天實現一些!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章