Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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++ 基于宽度缩放QWidget高度_C++_Qt_Qwidget - Fatal编程技术网

C++ 基于宽度缩放QWidget高度

C++ 基于宽度缩放QWidget高度,c++,qt,qwidget,C++,Qt,Qwidget,我有一个包含图像的QLabel。我需要确保图像始终占据QLabel宽度的100%,但保留纵横比也同样重要。这意味着我还需要增加QLabel高度,以便图像适合。与此图像一样,高度必须合适: 我认为没有办法指定首选纵横比,所以我只是尝试覆盖调整大小事件,并尝试在调整大小时强制调整正确的高度: void QPictureLabel::resizeEvent(QResizeEvent *event) { qDebug()<<"Resized."; // Current ima

我有一个包含图像的QLabel。我需要确保图像始终占据QLabel宽度的100%,但保留纵横比也同样重要。这意味着我还需要增加QLabel高度,以便图像适合。与此图像一样,高度必须合适:

我认为没有办法指定首选纵横比,所以我只是尝试覆盖调整大小事件,并尝试在调整大小时强制调整正确的高度:

void QPictureLabel::resizeEvent(QResizeEvent *event)
{
    qDebug()<<"Resized.";
    // Current image width in pixels
    float pw = myPixmap.width();
    // current label width in pixels
    float my_width = width();
    // ratio of label and image width can decide the new required label height
    float new_h = (my_width/pw)*myPixmap.height();
    // This is an attempt to prevent endless loop... didn't work out
    if(new_h!=height()) {
        // Force new height (that works)
        resize(my_width, new_h);
        // Tell the layout to move other elements (that doesn't work at all!)
        updateGeometry();
    }
}
在添加updateGeometry调用之前,它看起来如下所示:

正如您所看到的,我用红色边框突出显示了它,标签确实根据需要进行了扩展。但其他小部件并不关心这一点

我添加了updateGeometry调用,但由于某些原因,结果是无休止的循环。我需要以正确的方式通知布局QLabel需要更多的空间

但由于某种原因,结果是无休止的循环


这是有文档记录的,请阅读resizeEvent的文档。Shf的解决方案应该适合您。

您尝试过qt的heightForWidth吗?这里有几个老问题,基本上是这样问的。看到了吗,@Shf heightForWidth在Qt的新版本中不再起作用了。@TomášZato,嗯?为我的Qt5.5项目工作。1@TomášZato,还有,您是否尝试过不使用图像调整标签的大小,而只是调整图像本身的大小?具有缩放和keepAspectRatio?看看这个答案——或者更好的解决方案来重新实现sizehint for you标签,这样版面就能知道正确的大小——这个答案——我想你是对的,但这不是发布有用答案的方法。在评论中保留这些内容,尤其是因为您没有添加太多新信息。