我正在使用wheelEvent实现我的QGraphicsView缩放
void View::wheelEvent(QWheelEvent *e)
{
if (e->modifiers().testFlag(Qt::ControlModifier)){ // zoom only when CTRL key pressed
int numSteps = e->delta() / 15 / 8;
if (numSteps == 0) {
e->ignore();
return;
}
qreal sc = pow(1.25, numSteps); // I use scale factor 1.25
this->zoom(sc);
e->accept();
}
}
和缩放项目
void View::zoom(qreal scaleFactor)
{
scale(scaleFactor, scaleFactor);
}
这里我不想缩小太深,所有我需要它来限制缩放到某一点,我必须限制缩小,所以我试图找到转换点
qreal
View::zoomScale() const
{
return transform().m11();
}
但是我无法限制缩放。 请帮我找到解决方案。
答案 0 :(得分:1)
您可以计算相对于“正常缩放”的缩放系数,并决定是否可以缩放。
例如,您可以将QRect作为参考,并在缩放后检查其大小:
void ClassA::scale(qreal scaleFactor) {
QRectF(0, 0, 1, 1); // A reference
qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(r).width(); // absolute zoom factor
if ( factor > 20 ) { // Don't zoom more than 20x
return;
}
this->scale(scaleFactor, scaleFactor);
}