2013-02-03 59 views
0

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

以我查看器类的构造:

{ 
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()。

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

回答

0

我认为是因为您将QSizePolicy :: Minimum设置为imageLabel,请使用MinimumExpanding or other来更好地满足您的需求。

+0

我试着将sizePolicy更改为MinimumExpanding和其他几个,但情况保持不变。 – deguolao