2

我正在尝试使用 qt creator 实现一个可扩展的图像小部件,它将保留图像的纵横比。我发现的所有示例或帖子都建议扩展 QLabel 并重新实现 resizeEvent。这就是我所做的,它几乎可以工作,但有一些问题。

  1. 当主窗口第一次打开时,图像会稍微变大并扩大主窗口的大小(这不是太大的问题)。

  2. 当我最大化窗口时,所有图像都会放大,但是当我取消最大化窗口时,图像无法缩小。

我尝试更改 QLabel 子类(称为 ClickableImage)和包含 ClickableImage 布局的父小部件的 resizeEvents。这是一些相关的代码。

void ClickableImage::resizeEvent(QResizeEvent *e)
{
    qDebug() << "Resizing : " << ticker;
    ticker++;

    int w = e->size().width();
    int h = e->size().height();

    qDebug() << "W : " << w;
    qDebug() << "H : " << h;

    image = QPixmap(fname);
    image = image.scaled(w-7, h-7, Qt::KeepAspectRatio);
    setPixmap(image);
}

此外,我还阅读了以下资料,

Qt:调整包含 QPixmap 的 QLabel 的大小,同时保持其纵横比

https://docs.huihoo.com/qt/4.2/desktop-screenshot.html

谢谢。

4

1 回答 1

0

我有四件事你应该尝试。如果您放一个更大的代码示例,我可能会为您尝试,但这是我为您准备的:

  1. 您可能需要adjustSize()在调整大小事件结束时调用。你可能不需要一个update()电话,但你可以试着把一个电话放在那里,看看它是否有所作为。

  2. 最小化事件应该与 a 相同hideEvent(),因此如果您希望它更改最小化时的图像大小,也可以将一些图像缩放放在那里。

  3. Window 和 Dialog Widgets上的文档可能有助于调整某些大小,但它也可能是在调整小部件大小时设置小部件大小的递归性质的一部分。

  4. 所有这一切的替代方法是让小部件为您确定调整大小。QLabel 有一个选项可以让它根据它允许占用的大小来缩放它的内容,所以如果你创建一个 QLabel,设置它的像素图并设置缩放内容属性,那么它会自动为你做快速缩放调整大小。您可能仍需要将其缩小以最小化。

希望有帮助。如果您仍有问题,请告诉我。

于 2012-06-26T07:59:31.177 回答