使用fitinview和Qt:KeepAspectRatio时,图像质量会下降

时间:2012-08-19 07:58:41

标签: qt qt4

我正在使用Qt,我想要显示一个图像,我在QGraphicsView中显示它,因为图像大于我使用的QGraphicsView的盒子尺寸

ui->graphicsView->fitInView(viewraw->itemsBoundingRect() ,Qt::KeepAspectRatio);

其中viewraw包含pixmap地址到我的图像,我的问题超大图像已经解决了,但我的新问题现在是Qt自动调整大小后的图像显示非常非常糟糕的质量,它非常非常模糊

我该怎么办?

有没有办法在盒子里显示图像,没有质量损失?

谢谢!

1 个答案:

答案 0 :(得分:3)

您应该尝试启用抗锯齿功能:

ui->graphicsView->setRenderHints(QPainter::Antialiasing 
        | QPainter::SmoothPixmapTransform 
        | QPainter::TextAntialiasing);

<小时/> 您可以在包含视图的布局上使用QLayout::setSizeConstraint(QLayout::SetFixedSize),以调整父窗口小部件的大小以适合视图。大小将是视图sceneRect()函数返回的大小。

例如,以下代码将调整QMainWindow的大小(并锁定大小),以便两个项都可见:

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow mainWindow;
    QGraphicsView *view = new QGraphicsView(&mainWindow);
    QGraphicsScene *scene = new QGraphicsScene(view);
    view->setScene(scene);

    mainWindow.layout()->setSizeConstraint(QLayout::SetFixedSize);
    mainWindow.setCentralWidget(view);
    mainWindow.show();

    scene->addRect(-100,-100,10,10, QPen(), Qt::red );
    scene->addRect(600,450,10,10, QPen(), Qt::blue );

    return a.exec();
}

或者,因为您正在使用设计师,

    在小部件树中
  • ,转到图形视图的父项,它应该有一个布局,
    • 如果不是(如果图标是这个:No Layout Icon),通过左键单击项目名称添加一个,并在“Lay Out”菜单中选择一个布局(如果您只有一个小部件,类型布局无关紧要,只需选择一个),
  • 然后转到属性面板中相同项目的最后一个选项,该选项应为“layoutSizeConstraint”并选择“SetFixedSize”选项。