一般视图操作是通过按压鼠标滚轮拖动实现视图的平移操作。
数学模型
平移的仿射变换是最简单的变换操作。
- 假设几何图形坐标系原点在视图坐标系下坐标为Pgeo(Xgeo, Ygeo);
- 鼠标拖拽产生的移动向量在视图坐标系下表示为(Xview_delta, Yview_delta),可简单理解为鼠标移动的像素数目;
- 求:拖拽后几何图形坐标系原点在视图坐标系坐标Pgeo_new(Xgeo_new, Ygeo_new).
Xgeo_new = Xgeo + Xview_delta
Ygeo_new = Ygeo + Yview_delta
更新
Xgeo= Xgeo + Xview_delta
Ygeo = Ygeo + Yview_delta
视图实现
/// j-view.h
QPoint mouse_pos_;
bool is_dragging_ = false;
/// j-view.cpp
void JView::mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::MidButton) {
is_dragging_ = true;
}
}
void JView::mouseReleaseEvent(QMouseEvent *e) {
if (e->button() == Qt::MidButton) {
is_dragging_ = false;
}
}
void JView::mouseMoveEvent(QMouseEvent *e) {
auto pos = e->pos();
auto delta