我正在使用Qt Creator 2.8.1和Qt 5.1.1创建一个程序,基本上展示一张图像(在这种情况下是一张纸牌),还附带有几个按钮、标签和一条行编辑器。所有的小部件都在垂直/水平布局中,窗口布局是网格布局。
我重新实现了主窗口的resize event,以便使图像正确地调整大小并调整其大小 - 基本上,标签在垂直方向上尽可能扩展(垂直大小策略设置为Expand(1)),然后对图像进行重新缩放。
当窗口扩展时,一切正常,标签和图像都可以正确地调整大小。然而,我无法将窗口缩小:也就是说,在调整大小时,我无法使窗口的高度比当前标签大小所需的高度更小 - 标签和图像都不会调整大小。如果我水平缩小窗口,那么为了保持比例,图像也会被缩小(最左边的图像),然后我就可以垂直缩小窗口。请注意,当水平调整窗口大小时,仅会缩小图像/像素映射,而不是标签。
以下是我用来管理大小的代码(2):
void MainWindow::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
//Some code that is not causing the problem - I've checked
showImage();
}
void MainWindow::showImage()
{
int w = ui->imageLabel->width();
int h = ui->imageLabel->height();
//Getting image path from file - also not causing the problem
QPixmap pixmap(":/image/path.png");
//The image is quite big, so I need to
// set a scaled pixmap to a w x h window, keeping its aspect ratio
ui->imageLabel->setPixmap(pixmap.scaled(w,h,Qt::KeepAspectRatio));
ui->imageLabel->setMask(pixmap.mask());
}
以下是Qt Designer中的布局以及运行时的效果:
![Arrangement](https://istack.dev59.com/ef7ew.webp)
因此,总结一下:
- 当增加窗口高度时,标签和图像会按比例增大。
- 当减小窗口高度时:
- 如果图像不必更改,即使标签需要更改,窗口也会正常调整大小。
- 如果图像需要缩小,则窗口根本不会调整大小。
- 当减小窗口宽度时,窗口会正常调整大小。
- 如果需要保持图像比例,图像(像素图)会缩小,但
我觉得奇怪的是像素图会阻止窗口在垂直方向上调整大小,但在水平方向上调整大小时却没有问题。
问题是,如题所述:有什么解决方法吗?
(1) 也尝试了最小扩展,结果发生了同样的事情。 - 还尝试通过编程方式调整标签大小,但其他部件会忽略标签的大小并且重叠。
(2) 由于我基本上是第一次使用Qt,所以不知道如何复制可以复制、编译和执行的代码量,而不在这个问题中填充大量不重要的代码。
注意:如果您认为有用于找出问题原因或解决方案的更多信息,请随时提问。