我正在寻找一种方法来检测 Qt 小部件的 ToolTip 在按下特定组合键时是否可见。如果是,我想将工具提示的文本复制到剪贴板。
具体来说,我有一个包含缩写字符串的 QListView,它设置为(通过关联模型的 Qt::ToolTipRole)以在鼠标悬停在相应列表项上时显示相应列表项的完整字符串。我正在寻找的行为是,如果用户在工具提示可见时按下 CTRL-C(由 QShortcut 检测到),则工具提示文本将复制到剪贴板。
我最初的想法是使用 QListView 小部件的 children() 方法来查看其中是否有工具提示预设:
// Inisde the slot connected to QShortcut::activated...
auto children = _ui -> myListView -> children();
QString selectionText;
for (const auto & child : children)
{
if (qobject_cast<QToolTip *>(child))
{
selectionText = qobject_cast<QToolTip *>(child) -> text();
break;
}
}
...但这失败了,因为事实证明 QToolTip 不是从 QObject 继承的。
我还考虑过在 ListView 的主事件处理程序中筛选 QEvent::QToolTip 事件,虽然我可能可以让它工作,但它似乎过于低级;我需要使用屏幕坐标来确定列表中的哪个项目被悬停并查找小部件的超时以检查在触发 QShortcut 时工具提示是否再次消失。如果没有更简单的方法,我会感到失望。
有没有我看不到的明显前进方向?