gpt4 book ai didi

qt - QComboBox 的弹出窗口作为 QGraphicsProxyWidget 被遮挡/相交

转载 作者:行者123 更新时间:2023-12-02 04:43:46 31 4
gpt4 key购买 nike

我有一个 QGraphicsScene,我在其中显示一些 QGraphicsProxyWidgets,例如 QComboBox。在初始状态下,一切正常:

Initial State

但是,一旦显示了组合框的弹出部分,它就不是在场景的顶部,而是在组合框以南的元素后面:

Popup State

每当悬停组合框时,我已经为代理提供了高 Z 级别值,但这无济于事。

bool MyClass::sceneEventFilter(QGraphicsItem* pWatchedObj, QEvent* pEvent)
{
if(pEvent->type() == QEvent::GraphicsSceneHoverEnter)
{
if(pWatchedObj == m_pProxy)
{
m_pProxy->setZValue(zValue() + 200);
return false;
}
}
}

有人有想法吗?我是否必须以某种方式拦截鼠标按下事件并重新计算组合框大小(加上它的弹出窗口)以通知场景/ View 以根据 Z 级别进行适当的重新排序/排序?

最佳答案

QWidget 具有 raise() 方法,用于将小部件提升到父小部件堆栈的顶部。

通过widget()方法获取QGraphicsProxyWidget的widget,然后使用raise()方法。

函数将是:

bool MyClass::sceneEventFilter(QGraphicsItem* pWatchedObj, QEvent* pEvent)
{
if(pEvent->type() == QEvent::GraphicsSceneHoverEnter)
{
if(pWatchedObj == m_pProxy)
{
m_pProxy->widget()->raise();
return false;
}
}
}

试试上面的改变。它应该运作良好。

关于qt - QComboBox 的弹出窗口作为 QGraphicsProxyWidget 被遮挡/相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148904/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com