Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Qt 用图像填充放置在网格中的QLabel/QGraphics小部件_Qt_Layout - Fatal编程技术网

Qt 用图像填充放置在网格中的QLabel/QGraphics小部件

Qt 用图像填充放置在网格中的QLabel/QGraphics小部件,qt,layout,Qt,Layout,我在水平布局QHBoxLayout中放置了两个QGraphicsView和一个QLabel,其layoutStretch设置为1,1,1。问题是,当我尝试在其中加载图像时,图像不会填充窗口小部件区域。代码如下: QPixmap pix1("image1.jpg"); pix1 = pix1.scaled(ui->label1->size()); ui->label1->setPixmap(pix); QPixmap pix2("image2.jpg"); pix2 =

我在水平布局QHBoxLayout中放置了两个QGraphicsView和一个QLabel,其layoutStretch设置为1,1,1。问题是,当我尝试在其中加载图像时,图像不会填充窗口小部件区域。代码如下:

QPixmap pix1("image1.jpg");
pix1 = pix1.scaled(ui->label1->size());
ui->label1->setPixmap(pix);

QPixmap pix2("image2.jpg");
pix2 = pix2.scaled(ui->graphicsView1->size());
ui->graphicsView1->scene()->addPixmap(pix2);

QPixmap pix3("image3.jpg");
pix3 = pix3.scaled(ui->graphicsView2->size());
ui->graphicsView2->scene()->addPixmap(pix3);
下面是不希望的输出:

我已尝试将widget的HorizontalPolicy和VerticalPolicy属性设置为Expanding(扩展)和Minimum(最小),但它们都没有帮助。

将size policy设置为QSizePolicy::Ignored(忽略),并使用Qt::KeepAspectRatioByExpanding(扩展)进行缩放:


您可能希望在resizeEvent中缩放pixmaps。

这改善了结果,但图像仍然无法填充整个区域:您是否实现了resizeEvent?是的,这确实有帮助。唯一的问题是,我必须调整窗口的大小,以使图像填充其容器。使用paintEvent而不是resizeEvent也解决了这个问题。这是在QT中获取图像填充小部件的自然方法吗?哇。现在paintEvent的调用率很高,所以我的解决方案的性能很差。我将上面的代码放在showEvent和resizeEvent中,现在它的行为应该是正常的。我猜小部件的大小不是在QMainWindow构造函数中计算的,这就是为什么它们的图像没有缩放到正确的大小。如果有办法在QMainWindow中更新小部件的大小,那就太好了。尽管如此,我还是要再次问:这个解决方案是解决这个问题的正确方法吗?
ui->label1->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
pix1 = pix1.scaled(ui->label1->size(), Qt::KeepAspectRatioByExpanding);
ui->label1->setPixmap(pix);