gpt4 book ai didi

c++ - Qt 4.8.5 QGraphicsView::fitInView 无法完全匹配

转载 作者:太空狗 更新时间:2023-10-29 21:23:23 26 4
gpt4 key购买 nike

我在尝试将我的场景内容(拉伸(stretch))放入我的 QDeclarativeView 时遇到问题。我以常用方式加载 QML 文件。我用下面的代码覆盖了 showEvent 和 resizeEvent 方法:

QGraphicsItem* rootItem = this->scene()->items.at(0);
QRectF rootRect = rootItem->sceneBoundingRect(); // it gives me a QRectF(0,0,1920,1080)
this->fitInView(rootRect, Qt::IgnoreAspectRatio); // Aspect doesn't matters.

问题是它一直在内容周围显示一个白色的小边框(大约 4 个像素)。我已经在 1920x1080、1920x1200 和 1440x900 下进行了测试,我桌面上的所有这些分辨率显示的内容都存在同样的问题。即使在全屏模式下,它也会保留白色小边框。

只是为了确保它与内容无关,我已将 View 的背景画笔设置为黑色并且白色边框变为黑色(换句话说,内容被缩小得太多以致无法显示在 View 中)。

一旦根据内容大小改变背景部分,从矩形硬编码中减去值就不是一个选项。 (它应该动态适应)。

有什么建议吗?

最佳答案

也是刚遇到的问题。由于该错误尚未解决,因此我将发布我的部分解决方案。我将 QGraphicsView 子类化并添加了一个方法 myFitInView(),它会自动执行所需的缩放和居中。

我想如果您需要更多性能,您也可以直接填充矩阵,但我不需要这个,因此单独缩放和居中。

此外,此方法会丢失任何先前的 View 转换,但您也可以通过获取当前矩阵并相应地修改/相乘来解决这一问题。

void MyGraphicsView::myFitInView(QRectF const &rect)
{
QRectF viewRect = frameRect();

double scaleX = viewRect.width() / rect.width();
double scaleY = viewRect.height() / rect.height();

QTransform trans;
trans.scale(scaleX, scaleY);
setTransform(trans, false);

centerOn(rect.width() / 2, rect.height() / 2);
}

关于c++ - Qt 4.8.5 QGraphicsView::fitInView 无法完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com