In Qwt (
http://qwt.sf.net) gibt es eine Klasse QwtPicker, die vermutlich das leistet was Du benötigst.
Im Prinzip ist sie folgendermassen zu benutzen:
QwtPicker *picker = new QwtPicker(canvasView->viewport());
picker->setSelectionFlags(QwtPicker::DragSelection | QwtPicker::CornerToCorner);
connect(picker, SIGNAL(selected(...)), ...);
In Qwt 4.2 findest Du die klassische Implementierung, die das Gummiband über Zeichnen im XOR mode realisiert. In Qwt 5.x (läuft mit Qt3 oder Qt4) habe ich auf alles verzichtet, was es in Qt4 nicht mehr gibt, und das Gummiband ist als ein maskiertes Widget das über der canvas liegt implementiert.
Die Implementierung im XOR mode ist natürlich sehr viel schneller, was man z.B merkt, wenn man X11 remote über eine langsame Leitung fährt. Der Qwt5 Picker kann dafür auch Texte mit antialiased Fonts (Positions Tracker) rumschieben. ( Hier haben wir übrigens einen der Fälle in denen Qt3 Qt4 überlegen ist. )
Wenn Du Qwt zu Deiner Applikation nicht dazu linken willst, kannst Du den Code einfach auf Deine Bedürfnisse abspecken.
Eine Anmerkung noch zu QRubberband: ich habe während der Qt 4.0 Phase mal probiert, ob ich den Picker damit implementiere, bin aber sehr schnell davon abgekommen. Der Grund war, daß ich da viel zu dicke Linien (mehrere Pixel mit einem Füllmuster) hatte, die zum feinen Selektieren in einer Grafik nicht wirklich geeignet waren. Die Dicke kann man aber nicht einstellen, da sie eine Eigenschaft des eingestellten Style sind.
Uwe