あなたが求めているものの例の画像を見ると便利ですが、私は何を意味するか知っていると思います.
個人的には、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);
};
ペイント関数では、可視バーの高さまで四角形を描画しますが、boundingRect では完全な四角形を返します。そうすれば、バーは目に見えて非常に小さくなりますが、オブジェクトは完全な高さになり、バーの表示領域の上のマウス選択に応答します。
テキストについては、このオブジェクトに子として追加し、選択されたときに親に通知するか、この Bar クラスの boundingRect を拡張してペイント関数でレンダリングすることができます。
boundingRect は、ローカル座標でオブジェクトによって表される領域であることに注意してください。長方形で定義されていないオブジェクトがある場合は、shape() 関数も実装する必要があります。デフォルトでは、shape() は boundingRect() を呼び出します。