c++ - 如果将鼠标事件设置为透明,您如何仍然使用小部件的功能?
问题描述
我的主窗口顶部有一个小部件,更像是广告横幅。它阻止用户使用它背后的某些功能,所以我将它设置为
setAttribute( Qt::WA_TransparentForMouseEvents );
但是那个特定的广告横幅有 2 个按钮,如果它设置为“透明”,它们显然不能使用。我的问题是,我怎样才能仍然使用设置为对鼠标事件透明的横幅内的按钮功能?
它看起来像这样:
解决方案
使用上述横幅小部件的鼠标事件制作了一个解决方案:
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);
}
}
推荐阅读
- sql - 在 SQL 中匹配对时收到额外的行
- android - RFCOMM_CreateConnection - 已打开状态:2,RFC 状态:4,MCB 状态:5 - isConnected 返回 false 并且无法重新连接
- angularjs - AngularJs 和 Bootstrap3:表单验证和必填字段
- javascript - 如何将数据发布和解析到节点快递
- php - 基于foreach的动态SQL语句
- swift - CBCentralManager 在收到 .resetting 类型的事件后的预期行为是什么
- javascript - 整数/十进制用户输入:如何序列化/存储值
- asp.net - SSRS 报表与 ASP.NET 的集成
- c++ - VS2017:无法添加字符串/wstrings
- directory - STM32与A4899步进电机驱动器通讯