首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有办法为QGraphicsItem指定选择区域吗?

有办法为QGraphicsItem指定选择区域吗?
EN

Stack Overflow用户
提问于 2013-09-23 06:27:42
回答 1查看 2K关注 0票数 3

我有一些用QGraphicsRectItem绘制的直方图;其中一些矩形是长的,有些是短的。虽然选择长方形是没有问题的,但短矩形可能会有困难。

因此,我想知道是否有一种方法可以指定自定义区域来触发项目的mousePressEvent,因此矩形具有相同的大小选择区域。

除了矩形,我还在同一行上画了一些文字。以某种方式将它们分组并为组编写mousePressEvent会有帮助吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 08:38:08

看到你所问的问题的一个例子是有用的,但我想我知道什么是什么意思。

就我个人而言,我只是创建我自己的类,继承自QGraphicsItem (或者QGraphicsObject,如果您想要信号和插槽)。然后,这个类可以提供要表示要选择的区域的完整区域的boundingRect(),但是画图()函数只绘制条形图的可见部分。就像这样:-

代码语言:javascript
运行
复制
class Bar: public QGraphicsItem
{
    Q_OBJECT

    public:
        Bar(int x, int y, int width, int height, int visibleBarHeight);

        // returns the area of the object
        QRectF boundingRect() const;

        void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); 
};

在paint函数中,您将绘制到可见条形高度的重排,但是在boundingRect中,返回完整的rect。这样的话,这个条形可能是非常小的,但是这个物体是完全高度的,并且会响应鼠标选择在这个条的可见区域上的选择。

对于文本,您可以将其作为子对象添加到该对象中,并在它被选中时向父对象发送信号,或者扩展这个Bar类的boundingRect并在画图函数中呈现它。

请注意,boundingRect是对象所表示的区域,以局部坐标表示。如果有一个未由矩形定义的对象,则还需要实现want ()函数。默认情况下,shape()调用boundingRect()。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18952964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档