2013-08-23 32 views
2

我想开发一个使用Qt的功能,我不知道它是否可以实现。这是要求:如何在工具提示中绘制东西?

当用户悬停在一个节点(从QGraphicsItem派生的对象)上,窗口将显示在节点附近,在窗口中可能有一些直方图或按钮,可点击进一步显示信息。当鼠标离开窗口时,它会自动关闭。

我试着使用工具提示,因为它可以在节点附近弹出并在鼠标离开时关闭,但它只能显示文本。所以,它仍然不能这样工作。我想知道是否有另一种方式来做到这一点?我做了很多谷歌搜索,但仍然没有答案。

非常感谢您的帮助。

回答

2

如果您可以使用第三方库,Qxt提供了一个提供基于QWidget的工具提示的类,它可让您使用任意小部件作为工具提示而不仅仅是文本。

参见:Qxt::ToolTip

+0

谢谢。克里斯。我厌倦了Qxt :: ToolTip,但它似乎只能用于添加QWidget对象。所以,我最后在节点附近绘制了一个矩形并更改了它的边界矩形,并且矩形内的所有项目(如按钮)都是动态绘制的。猜猜我没有别的选择。再次感谢。 –

0

你不必使用工具提示您的应用程序

你可以使用或调用控件或对话框,在悬停鼠标事件

0

请参考Qt的例子EmbeddedDialog例如,它是先进的,但你可以理解悬停输入/离开事件是如何工作的。我个人更喜欢不要为每个项目创建Popupdialog的实例,只要有必要就创建它。否则,创建一个对话框,并通过构造函数初始化将其引用传递给所有项目。

1. These are the API you are intrested on, reimplemet this. 
     QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) and void QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)  
2. When You create Dialog, You can pass Qt::WindowFlags as Qt::ToolTip. 
+0

谢谢你的解决方案。实际上,我有大约30个节点需要在悬停时弹出一个对话框。这个对话框还可以包含诸如按钮之类的项目,可以点击这些项目以触发进一步的交互,例如显示直方图。我想我应该使用EmbeddedDialog,但我选择了另一种方式....这是动态绘制一个矩形作为对话框和所有项目里面,并且耗时.... –