问题
I want to create a resizeable selection tool to select a part of an image with the mouse. I want to accomplish this with QT, i have a working QRubberBand to create a basic selection.
Next step is to make that selection resizeable with the mouse. So if you click&drag a corner the size changes accordingly and if you click&drag inside the selection it should move the selection.
now my idea is subclassing QRubberBand and overriding the paintEvent method to paint a big dot on every corner and perform the mouseevents on those dots. But i was wondering if anyone has a smarter/better way of doing this?
i'd like to hear some ideas on this. thanks in advance.
回答1:
I did something similar before. I used QGraphicsView instead of QWidget which made the development much easier. I used QGraphicsItem as the "rubber band". QGraphicsView already handles a lot of user interaction so I didn't have to bother with reimplementing QWidget::mouseMove() events, etc. Plus the performance was much faster than on QWidget because of QGraphicsView optimizations.
Hope this helps
回答2:
I just implemented a general framework for arbitrary interactive overlay graphics for my Qt image and vector viewer. Please see the branch Lasso in https://github.com/dov/Qviv/tree/Lasso/Lasso . You can compile it with scons
and then run testLasso
to test it. Currently the test implements a movable semitransparent caliper, but you can easily change it to any graphics you desire. Note that the Lasso sub directory is currently completely independent of the rest of the Qviv project.
来源:https://stackoverflow.com/questions/5729193/resizeable-rubberband-with-qt