Qt QLabel未能调整大小

时间:2013-02-03 07:10:01

标签: qt user-interface qlabel

我实现QLabel很像Qt的ImageViewer示例,除了我使用QGridLayout来定位我的小部件。我还使用QScrollBar实现了类似的扩展我的QLabel的行,但是QLabel在QScrollArea中的扩展并不像它应该的那样。我不确定它是否与某种GridLayout管理问题有关。我已经到处读书,现在尝试不同的东西3天。下面我列出了我的代码的相关部分。

在我的Viewer类构造函数中:

{
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倍。但是当我运行代码时,我没有观察到在QScrollArea中放大的imageLabel,我在imageViewer演示中看到了。 imageLabel1在加载时只保留原始大小,并且不响应滚动条的valueChange()。

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

1 个答案:

答案 0 :(得分:0)

我认为是因为您将QSizePolicy :: Minimum设置为imageLabel,请尝试更符合您需求的MinimumExpanding or other