Qt 音乐播放器:实现点击窗体外的地方该窗口自动关闭

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33559992/article/details/82901888

最近在模仿网易云播放器的时候遇到这个问题:点击"播放列表"弹出音乐列表窗体,点击该窗体的其他的地方。该窗口自动关闭,如下所示:
在这里插入图片描述
(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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33559992/article/details/82901888