举例来说,您正在询问的内容将很有用,但我想我知道这是什么意思.
就个人而言,我只是创建自己的类,该类继承自QGraphicsItem(如果需要信号和插槽,则继承自QGraphicsObject).然后,此类可以提供要表示要选择的区域的整个区域的boundingRect(),但是paint()函数仅绘制条的可见部分.像这样的东西:
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中,返回完整的矩形.这样,条形图可能会非常小,但是对象是完整的高度,并且会响应在条形图可见区域上方的鼠标选择.
至于文本,您可以将其作为子对象添加到该对象中,并在选择父对象时向其发出信号,或者扩展此Bar类的boundingRect并在paint函数中进行渲染.
请注意,boundingRect是对象在局部坐标中表示的区域.如果您的对象不是由矩形定义的,则还需要实现shape()函数.默认情况下,shape()调用boundingRect().