Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QLabel::setPixmap()和QScrollArea::setWidget()的名称_C++_Qt_Qlabel_Qscrollarea - Fatal编程技术网

C++ QLabel::setPixmap()和QScrollArea::setWidget()的名称

C++ QLabel::setPixmap()和QScrollArea::setWidget()的名称,c++,qt,qlabel,qscrollarea,C++,Qt,Qlabel,Qscrollarea,我一直在追踪一个可以归结为这一点的错误-如果在滚动区域内显示图像标签,如果在之后调用QLabel::setPixmap(),qscrolrea::setWidget()则标签的大小不会调整为图像的大小 本例说明了问题所在,只需将计算机上的真实图像替换为/path/to/some/image.png: QScrollArea *scrollArea = new QScrollArea; QLabel *label = new QLabel(scrollArea); scrollArea->s

我一直在追踪一个可以归结为这一点的错误-如果在滚动区域内显示图像标签,如果在
之后调用
QLabel::setPixmap()
qscrolrea::setWidget()
则标签的大小不会调整为图像的大小

本例说明了问题所在,只需将计算机上的真实图像替换为
/path/to/some/image.png

QScrollArea *scrollArea = new QScrollArea;
QLabel *label = new QLabel(scrollArea);
scrollArea->setWidget(label);
label->setPixmap(QPixmap("/path/to/some/image.png"));
scrollArea->show();
如果在
setWidget()
之前将行交换为调用
setPixmap(),标签的大小将正确调整

为什么会发生这种情况,如何强制标签正确调整大小?

将滚动区域的属性设置为true:

scrollArea->setWidgetResizable(true);

好的,我测试了它,它工作了,但是为什么呢?文档说,如果该属性为真,“滚动区域将自动调整小部件的大小,以避免滚动条”,这似乎与问题无关。此外,文档还说,不管这个属性如何,我都可以通过编程方式调整标签,“滚动区域将自动调整到新的大小。”因此,即使没有它,它也应该可以工作。那么有什么好处呢?@sashoalm如果你没有将widgetResizeable设置为true,小部件将保持其初始大小,直到其他东西调整它的大小为止(例如你手动调整)。setPixmap()不也调整它的大小吗?我假设它在代码中的某个地方调用了
resize()
,虽然我尝试在Qt内部进行跟踪,但找不到任何类似于调整大小的内容。@sashoalm否。您可以测试这个。使用父级创建
QLabel
。为其设置一个pixmap,不要将其添加到布局中。运行该程序,您会注意到它将处于默认大小。谢谢您的回答。我遇到了另一个性质相同的问题,这次是
ensureinvisible()
。如果你有兴趣看的话,我已经在上描述过了。