2011-07-11 69 views
4

我有一个QWidget,我正在绘制一些线条,我想启用/实现缩放功能,以便更好地看到我正在绘制的图片。我想将它连接到鼠标滚轮上,就像在普通浏览器中一样,只需按下'ctrl'键并转动鼠标滚轮即可放大和缩小。QWidget上的缩放功能

是否有默认功能?我试图寻找一些例子,但没有任何运气。那我该怎么做?

+0

可以考虑使用'QScrollArea'。请看http://stackoverflow.com/a/32269574/575491如何在QScrollArea中实现缩放。 – bkausbk

回答

14

尝试重新实现您的paintEvent,并在绘制之前将比例应用于QPainter。

class YourClass:public QWidget 
{ 
... 
    protected: 
    void paintEvent (QPaintEvent * event); 
    void wheelEvent (QWheelEvent * event); 
    private: 
    qreal scale; 
}; 

void YourClass::paintEvent (QPaintEvent * event) 
{ 
    QPainter p; 
    p.scale(scale,scale); 
// paint here 
} 
void YourClass::wheelEvent (QWheelEvent * event) 
{ 
    scale+=(event->delta()/120); //or use any other step for zooming 
} 
+0

“正常”滚动导致 - 每步+ 120,快速滚动结果+240或每步-360。 – Anonymous