Qt 音樂播放器:實現點選窗體外的地方該視窗自動關閉
阿新 • • 發佈:2018-12-28
最近在模仿網易雲播放器的時候遇到這個問題:點選"播放列表"彈出音樂列表窗體,點選該窗體的其他的地方。該視窗自動關閉,如下所示:
(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);
}
}