首页 > 解决方案 > 如果将鼠标事件设置为透明,您如何仍然使用小部件的功能?

问题描述

我的主窗口顶部有一个小部件,更像是广告横幅。它阻止用户使用它背后的某些功能,所以我将它设置为

setAttribute( Qt::WA_TransparentForMouseEvents );

但是那个特定的广告横幅有 2 个按钮,如果它设置为“透明”,它们显然不能使用。我的问题是,我怎样才能仍然使用设置为对鼠标事件透明的横幅内的按钮功能?

它看起来像这样:

在此处输入图像描述

标签: c++qt

解决方案


使用上述横幅小部件的鼠标事件制作了一个解决方案:

void advertisement::mouseMoveEvent(QMouseEvent *event)
{
    qDebug()<< event->button();
    if (isRightBtn)
    {
        this->setAttribute(Qt::WA_TransparentForMouseEvents);
        main->_IsCamRotate = true;
        main->triggerMouseMove(event);
    }
}

void advertisement::mousePressEvent(QMouseEvent *event)
{
    qDebug()<< event->button();
    switch(event->button())
    {
    case Qt::MouseButton::RightButton:
        isRightBtn = true;
        break;
    }
}


void advertisement::mouseReleaseEvent(QMouseEvent *event)
{
    if (!this->rect().contains(event->pos()) && event->button() == Qt::MouseButton::RightButton)
    {
        main->triggerMouseRelease(event);
        isRightBtn = false;

        this->setAttribute(Qt::WA_TransparentForMouseEvents, false);
    }
}

推荐阅读