setSystemButton设置的组件无法触发enterEvent和leaveEvent
OS: WINDOWS 10 QWindowKit: 当前main分支
复现步骤:
- 最大化窗口
- 最小化窗口
- 再通过点击任务栏,显示窗口
此时鼠标移入 setSystemButton 设置的组件(自定义 QWidget ),无法触发此组件的 enterEvent
鼠标移出组件时,也无法触发此组件的 leaveEvent。
如下是正常状态下的截图:
如下是异常状态下的截图:
qt什么版本
QWidget还是QML?
Qt 6.8.2 qwideget
刚刚测试了一下,moveEvent(QMoveEvent* event) 也触发不了。
另外,已经设置了setMouseTracking(true);
1、是main分支最新的代码吧? 2、你截图里是系统按钮,那个我们内部有特殊处理,能不能试试标题栏里放一个其他的widget,然后setHitTestVisible
- 是最新main分支代码,昨天拉的,自己编译的
- 刚试了setHitTestVisible,还是不行,效果一样,只是没有那个
向下还原的tip了。
//agent->setSystemButton(QWK::WindowAgentBase::Minimize, titleBar->btnMin);
//agent->setSystemButton(QWK::WindowAgentBase::Maximize, titleBar->btnMax);
//agent->setSystemButton(QWK::WindowAgentBase::Close, titleBar->btnClose);
agent->setHitTestVisible(titleBar->btnMin,true);
agent->setHitTestVisible(titleBar->btnMax, true);
agent->setHitTestVisible(titleBar->btnClose, true);
这个问题很好复现,难道是我电脑的个别问题吗?你那里没有这个问题吗?
Windows 10 19044.4529
这个问题我有印象,应该是从Qt5就存在的Qt自己的bug
我记得给widget设置个Qt::WA_Mapped 好像就好了,总之你搜搜吧,印象中应该不少人遇到过
自定义QWidget设置 Qt::WA_Mapped 没有用,设置 setMouseTracking(true); 和 setAttribute(Qt::WA_Hover, true); 也没有用,
在窗口的showEvent里设置raise、activateWindow setFocus SetFocus都没用。
我发现这样搞一下有用:
void MarkImage::showEvent(QShowEvent* event)
{
HWND hwnd = reinterpret_cast<HWND>(winId());
LPARAM pos = MAKELPARAM(1, 1);
PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, pos);
PostMessage(hwnd, WM_LBUTTONUP, 0, pos);
}
而且必须用系统API发送这个点击事件才有用,用Qt的API发送这个点击事件就没用! 真是奇哉怪也!!!!
你发这个消息是强行触发一对鼠标事件,按理说不应该的,我再看看吧
我也是win10 qt6.8.2,没有触发,请问你有视频吗
当时没录视频
我也没复现出来