0

我实现了 QLabel 很像 Qt 的 ImageViewer 示例,除了我使用 QGridLayout 来定位我的小部件。我还实现了类似的行来使用 QScrollBar 缩放我的 QLabel,但是 QLabel 并没有像在 QScrollArea 内那样缩放。我不确定它是否与某种 GridLayout 管理问题或其他问题有关。3 天以来,我一直在到处阅读并尝试不同的事情。下面我列出了我的代码的相关部分。

在我的查看器类构造函数中:

{
imageLabel1 = new QLabel;
imageLabel1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
imageLabel1->setScaledContents(true);

scrollArea1 = new QScrollArea;
scrollArea1->setWidget(imageLabel1);
scrollArea1->setWidgetResizable(true);

....
QGridLayout *centralLayout = new QGridLayout;
centralLayout->addWidget(scrollArea1, 0, 0);
...}

和我的 scaleImage 方法:

void Viewer::scaleImage1(int factor)
{
  Q_ASSERT(imageLabel1->pixmap());
  scaleFactor *= (1 + factor);
  //imageLabel1->resize(scaleFactor* imageLabel1->pixmap()->size());

  imageLabel1->pixmap()->toImage().scaled(scaleFactor* imageLabel1->pixmap()->size(), Qt::KeepAspectRatio, Qt::FastTransformation);
  imageLabel1->adjustSize();

  adjustScrollBar(scrollArea1->horizontalScrollBar(), factor);
  adjustScrollBar(scrollArea1->verticalScrollBar(), factor);

  imageLabel1->update();
  }

我的 scaleImage1 函数是一个公共插槽,它接收来自 0 到 2 之间的滚动条的信号,因此,在 scaleFactor 中,imageLabel1 被设计为能够放大到其原始大小的 3 倍。但是当我运行代码时,我没有观察到 imageLabel 在 QScrollArea 内变大,我在 imageViewer 演示中看到了这一点。imageLabel1 在加载时仅保留原始大小,并且不响应滚动条的 valueChange()。

我非常感谢您的建议/提示。

4

1 回答 1

0

我认为是因为您将 QSizePolicy::Minimum 设置为 imageLabel,请尝试使用MinimumExpanding 或其他更适合您需求的方法。

于 2013-02-03T10:06:49.397 回答