【发布时间】:2016-02-02 08:59:48
【问题描述】:
我有一个 QGraphicsScene,其中显示了一些 QGraphicsProxyWidgets,例如 QComboBox。在初始状态下,一切都很好:
但是,一旦组合框的弹出部分显示出来,它就不是在场景的顶部,而是在组合框以南的元素后面:
每当组合框悬停时,我已经给代理一个高 Z 值,但这没有帮助。
bool MyClass::sceneEventFilter(QGraphicsItem* pWatchedObj, QEvent* pEvent)
{
if(pEvent->type() == QEvent::GraphicsSceneHoverEnter)
{
if(pWatchedObj == m_pProxy)
{
m_pProxy->setZValue(zValue() + 200);
return false;
}
}
}
有人有想法吗?我是否必须以某种方式拦截鼠标按下事件并重新计算组合框大小(加上其弹出窗口)以通知场景/视图以根据 Z 级别进行正确的重新排序/排序?
【问题讨论】:
-
在scene->addWidget()创建代理小部件后立即尝试对其进行setZValue。假设设置 Z-order 总是能够提升窗口可能是不正确的。
-
您需要提供更多信息,该问题涉及的所有项目的父子关系是什么。
zValue仅对直接兄弟姐妹有影响,所有其他QGraphicItem都按子父关系排序(以及一些允许在父级后面绘制子级的标志)。
标签: qt proxy qgraphicsview qcombobox