Qt工具提示在显示时将窗口带到前面

时间:2015-06-12 10:41:13

标签: c++ windows qt

[Windows 7上的Qt 5.4.2]在同一个Qt应用程序中创建两个窗口(QDialog或QMainWindow)。他们每个都有一个工具提示相关联。位置窗口d2部分地与窗口d1重叠。将鼠标悬停在d2窗口上,将会看到工具提示" d2窗口"弹出。问题是鼠标悬停在d1窗口上不仅会显示工具提示" d1窗口"但也将窗口d1移到前面。走到前面不是理想的行为。同时点击d2窗口客户区也不会将d2移动到前台。显示工具提示时,如何才能显示窗口?我已经设置了WA_AlwaysShowToolTips和WA_ShowWithoutActivating标志。

*当只有一个qt窗口时,似乎不会发生此问题,但我的设计需要多个窗口。

QDialog * d1=new QDialog();
d1->setToolTip("d1 window");
d1->setAttribute(Qt::WA_AlwaysShowToolTips);
d1->setAttribute(Qt::WA_ShowWithoutActivating);
d1->show();

QDialog * d2=new QDialog();
d2->setToolTip("d2 window");
d2->setAttribute(Qt::WA_AlwaysShowToolTips);
d2->setAttribute(Qt::WA_ShowWithoutActivating);
d2->show();

使用spy ++显示在显示工具提示时发送了WM_WINDOWPOSCHANGING窗口消息: WM_WINDOWPOSCHANGING lpwp:0E14C740 WM_WINDOWPOSCHANGING lpwp:0E14C740 WM_WINDOWPOSCHANGING lpwp:0E14CA08

1 个答案:

答案 0 :(得分:0)

此错误最初出现在Qt 5.0中,在Qt 5.3.0(QTBUG-39147)中报告,并固定为5.9.2(在17-19-2017)。删除Qt_WS_ *宏(替换为Q_OS_ *宏)和widgets / kerna / qtooltip.cpp模块的不完整维护,导致QTipLabel被实例化,客户端窗口小部件作为其父窗口小部件。这是Windows上一个已知的问题,它直接导致了这种功能障碍(显示工具提示会引起整个窗口)。

参见"补丁集6"在这个Qt代码审查页面中,它与#g; gitweb"链接,以及原始的错误报告: