QTransform 的缩放只能以一种方式工作?

发布于 2024-11-09 01:49:58 字数 626 浏览 0 评论 0原文

我在 QT 中缩放图像时遇到问题。我有一个显示图像的 GraphicsView,并且我放入了一个滑块以允许用户放大和缩小。为此,我一直使用 QTransform 类的缩放函数来实现此目的。如果我放大,即值变得越来越大,它通常会起作用。然而,当我朝相反的方向(使值越来越小)时,整个图像就会消失。放大也不能解决问题;无论我放大或缩小多少,整个图像都不再存在。所以以下是我的代码片段。

void MainWindow::on_ZoomSlider_valueChanged(int value)
{
  QTransform transformer;
  transformer.scale(scaler(value),scaler(value));
  ui->graphicsView->setTransform(transformer);
}

qreal MainWindow::scaler(int value)
{
    if(value < 0)
        return  1/(-(value-1));
    else if(value >0)
        return value+1;
    else
        return value+1;
}

如果可以帮助您找出问题所在,我很乐意对我的问题提供更多说明。

I have a problem with scaling an image in QT. I have a GraphicsView that has an image displayed and I have put in a slider to be able to allow the user to zoom in and out. For this, I've been using the scale function of the QTransform class to achieve this. It generally works if I zoom in, ie, if value gets bigger and bigger. However, when I go the opposite direction (making value smaller and smaller), the entire image disappears. Zooming back in doesn't fix the problem either; the entire image is no longer present no matter how much I zoom in or out. So the following are snippets of my code.

void MainWindow::on_ZoomSlider_valueChanged(int value)
{
  QTransform transformer;
  transformer.scale(scaler(value),scaler(value));
  ui->graphicsView->setTransform(transformer);
}

qreal MainWindow::scaler(int value)
{
    if(value < 0)
        return  1/(-(value-1));
    else if(value >0)
        return value+1;
    else
        return value+1;
}

I'd be happy to offer any more clarification on my problem if it'd help you help me figure out what's wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海螺姑娘 2024-11-16 01:49:58

1/(-(value-1)) 表达式计算为 INTEGER,在您的情况下始终为零。尝试使用 1.0/(-(value-1))。
另外,我对滑块不太熟悉,但我不明白为什么该值可能是负数。 valueChanged 信号带有实际值,而不是增量。

The 1/(-(value-1)) expression evaluates as an INTEGER, which is always zero in your case. Try using 1.0/(-(value-1)).
Also, I'm not really familiar with sliders, but I don't understand why could the value be negative. The valueChanged signal comes with the actual value, not the delta.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文