在显示之前测试QToolTip是否被遮挡

时间:2017-02-13 07:42:34

标签: c++ qt qt5

我正在使用QWindow来包含一些经过严格优化的OpenGL代码。

为方便用户交互,我有一种模式,光标下的数据显示在工具提示中。

当另一个窗口遮挡发送工具提示事件的窗口时,这会导致UX问题。在下面的屏幕截图中,工具提示是在Firefox窗口上绘制的(这是不受欢迎的)。

什么是范式解决方案?有没有办法测试窗口的一部分是否被遮挡?

enter image description here

调用工具提示的函数类似于:

if (!qIsNaN(value_under_cursor))
{
    auto state = QApplication::applicationState();
    auto text = QString::number(value_under_cursor, 'f', 3);
    static QString old_value;
    if (text != old_value)
    {
        auto static last_show = timestamp();
        auto now = timestamp();
        auto re_raster = ((now - last_show) >= ms_to_chrono(100));
        if (re_raster)
        {
            QToolTip::showText(current_mouse_coordinates_in_global, text);
            last_show = now;
        }
    }
    old_value = text;
}

1 个答案:

答案 0 :(得分:2)

我不知道是否有跨平台方式来测试特定区域是否被其他应用程序窗口遮挡,但您可以:

  • 检查您的窗口是否处于焦点(QWindow::isActive(),IIRC)并且仅显示工具提示(如果是),或
  • 使用OpenGL渲染工具提示。