繁体   English   中英

Qt,无法获取 QLabel 维度以正确缩放 QPixmap 以使其完全适合 QLabel

[英]Qt, Unable to get QLabel dimmensions to correctly scale a QPixmap to its fully fit QLabel

因此,我正在尝试缩放图像以从上到下完全适合 label。 问题是标签宽度和高度的输出不是像素值,所以我不确定如何正确地解决这个问题 go。 这是我的代码。

void MainWindow::drawPixmap()
{
    int labelWidth = ui->picLabel->width();
    int labelHeight = ui->picLabel->height();

    if(labelWidth <= labelHeight){
        pixMap = this->pixMap.scaledToWidth(labelWidth);
        ui->picLabel->setPixmap(pixMap);
    }
    else{
        pixMap = this->pixMap.scaledToHeight(labelHeight);
        ui->picLabel->setPixmap(pixMap);
    }
}

这是我的问题的视觉效果,黑框是 label 框周围的边框。 我试图让图像位于中心,使其顶部和底部接触两侧的黑框。

在此处输入图像描述

谢谢你的帮助!

问题可能出在您调用此 function 时。如果您在使 label 可见之前调用了此 function,则在 label 可见后,label 的大小可能不正确。 另外,想想当 label 调整大小时会发生什么(如果有的话)。 您仍然需要更新像素图的大小。 如果您的 label 永远不会改变大小,请尝试在 label 可见后调用它。 或者,尝试设置 QLabel::setScaledContents(true)

如果以上都不起作用,请尝试在 label 上安装一个 eventFilter 以获取标签的大小更改事件,在那里,您可以执行上述代码

MainWindow::MainWindow()
{
     ....
     ui->picLabel->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject* object, QEvent* event)
{
    bool res = Base::eventFilter(object, event);
    if (object == ui->picLabel && event->type() == QEvent::Resize)
    {
        int labelWidth = ui->picLabel->width();
        int labelHeight = ui->picLabel->height();

        if(labelWidth <= labelHeight){
            pixMap = this->pixMap.scaledToWidth(labelWidth);
            ui->picLabel->setPixmap(pixMap);
        }
        else{
            pixMap = this->pixMap.scaledToHeight(labelHeight);
            ui->picLabel->setPixmap(pixMap);
        }
    }
    return res;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM