1. 程式人生 > >Qt 音樂播放器:實現點選窗體外的地方該視窗自動關閉

Qt 音樂播放器:實現點選窗體外的地方該視窗自動關閉

最近在模仿網易雲播放器的時候遇到這個問題:點選"播放列表"彈出音樂列表窗體,點選該窗體的其他的地方。該視窗自動關閉,如下所示:
在這裡插入圖片描述
(ps:錄屏的時候,滑鼠顯示不出來,尷尬!)
為此,記錄實現該種效果的方法:

//建立該物件的時候,設定座標和大小都為0
m_pMusicPlayListWidget = new MusicPlayListWidget(this);
m_pMusicPlayListWidget->setGeometry(0,0,0,0);

點選按鈕進入槽函式:
這裡設定窗體的座標點為(0,0)大小和主窗體的大小一致。為了方便後面確定點選其他位置關閉該窗體。

//顯示播放列表窗體,這裡設定座標點為(0,0)
void QXMusicPlay::slot_showPlayList(bool flag) { Q_UNUSED(flag); m_pMusicPlayListWidget->show(); m_pMusicPlayListWidget->setGeometry(0,0,1020,670); }

在窗體物件中。重寫paintEvent()函式和mousePressEvent()函式實現.

//重繪事件
void MusicPlayListWidget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
QPainter painter(this); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.setRenderHint(QPainter::Antialiasing); QColor color(52,53,44); // color.setAlphaF(0.8);//設定透明度 painter.save(); painter.setPen(Qt::NoPen); painter.setBrush(color); QRectF rect=QRectF
(440,140,580,470);//繪製矩形,也就是我們所需要窗體的大小 painter.drawRoundedRect(rect,10,10); painter.restore(); } //重寫滑鼠點選函式,實現點選其他地方光比該窗體 void MusicPlayListWidget::mousePressEvent(QMouseEvent *event) { if(event->pos().x()<440) { this->hide(); setGeometry(0,0,0,0); } if((event->pos().y()>610)||(event->pos().y()<140)) { this->hide(); setGeometry(0,0,0,0); } }