qwindowkit icon indicating copy to clipboard operation
qwindowkit copied to clipboard

setSystemButton设置的组件无法触发enterEvent和leaveEvent

Open xland opened this issue 9 months ago • 13 comments

OS: WINDOWS 10 QWindowKit: 当前main分支

复现步骤:

  1. 最大化窗口
  2. 最小化窗口
  3. 再通过点击任务栏,显示窗口

此时鼠标移入 setSystemButton 设置的组件(自定义 QWidget ),无法触发此组件的 enterEvent 鼠标移出组件时,也无法触发此组件的 leaveEvent

如下是正常状态下的截图:

Image

如下是异常状态下的截图:

Image

xland avatar Mar 18 '25 12:03 xland

qt什么版本

wangwenx190 avatar Mar 18 '25 13:03 wangwenx190

QWidget还是QML?

wangwenx190 avatar Mar 18 '25 13:03 wangwenx190

Qt 6.8.2 qwideget

xland avatar Mar 18 '25 21:03 xland

刚刚测试了一下,moveEvent(QMoveEvent* event) 也触发不了。

另外,已经设置了setMouseTracking(true);

xland avatar Mar 19 '25 01:03 xland

1、是main分支最新的代码吧? 2、你截图里是系统按钮,那个我们内部有特殊处理,能不能试试标题栏里放一个其他的widget,然后setHitTestVisible

wangwenx190 avatar Mar 19 '25 05:03 wangwenx190

  1. 是最新main分支代码,昨天拉的,自己编译的
  2. 刚试了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

xland avatar Mar 19 '25 06:03 xland

这个问题我有印象,应该是从Qt5就存在的Qt自己的bug

wangwenx190 avatar Mar 19 '25 10:03 wangwenx190

我记得给widget设置个Qt::WA_Mapped 好像就好了,总之你搜搜吧,印象中应该不少人遇到过

wangwenx190 avatar Mar 19 '25 10:03 wangwenx190

自定义QWidget设置 Qt::WA_Mapped 没有用,设置 setMouseTracking(true);setAttribute(Qt::WA_Hover, true); 也没有用, 在窗口的showEvent里设置raiseactivateWindow 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发送这个点击事件就没用! 真是奇哉怪也!!!!

xland avatar Mar 20 '25 03:03 xland

你发这个消息是强行触发一对鼠标事件,按理说不应该的,我再看看吧

wangwenx190 avatar Mar 24 '25 03:03 wangwenx190

我也是win10 qt6.8.2,没有触发,请问你有视频吗

SineStriker avatar Mar 26 '25 08:03 SineStriker

当时没录视频

xland avatar Mar 26 '25 22:03 xland

我也没复现出来

wangwenx190 avatar May 03 '25 15:05 wangwenx190