我有一些用QGraphicsRectItem绘制的直方图;其中一些矩形是长的,有些是短的。虽然选择长方形是没有问题的,但短矩形可能会有困难。
因此,我想知道是否有一种方法可以指定自定义区域来触发项目的mousePressEvent,因此矩形具有相同的大小选择区域。
除了矩形,我还在同一行上画了一些文字。以某种方式将它们分组并为组编写mousePressEvent会有帮助吗?
谢谢!
发布于 2013-09-23 08:38:08
看到你所问的问题的一个例子是有用的,但我想我知道什么是什么意思。
就我个人而言,我只是创建我自己的类,继承自QGraphicsItem (或者QGraphicsObject,如果您想要信号和插槽)。然后,这个类可以提供要表示要选择的区域的完整区域的boundingRect(),但是画图()函数只绘制条形图的可见部分。就像这样:-
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()。
https://stackoverflow.com/questions/18952964
复制相似问题