我实现的QLabel很像Qt的ImageViewer示例,只是我使用QGridLayout来定位我的小部件。我还使用QScrollBar实现了类似的行来缩放QLabel,但QLabel在QScrollArea中的缩放效果并不理想。我不确定这是否与某种GridLayout管理问题或其他问题有关。三天来,我一直在四处阅读,尝试不同的东西。下面我列出了代码的相关部分。
在我的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倍。但当我运行代码时,我没有观察到imageLabel在QScrollArea内变大,这是我在imageViewer演示中看到的。imageLabel1只是在加载时保持原始大小,不响应滚动条的valueChange()。
我非常感谢你的建议。
我认为这是因为您将QSizePolicy::Minimum设置为imageLabel,请尝试使用MinimumExpanding或其他更适合您需求的方法。