[英]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.