QGraphicsScene - 在添加带有少量不透明点的大透明像素图时,应用程序会挂起很长时间

时间:2016-02-24 21:10:51

标签: c++ qt qgraphicsscene

当我将QGraphicsPixmapItem添加到场景中并且在第一次鼠标点击程序冻结之后。为什么?或者我如何从Qt的内部计算中排除这一点(如果我知道背后会发生什么......)

*的.h

#include <QtWidgets/QMainWindow>
#include "ui_bigqgraphicsscene.h"

class BigQGraphicsScene : public QMainWindow
{
    Q_OBJECT

public:
    BigQGraphicsScene(QWidget *parent = 0);
    ~BigQGraphicsScene();

private slots:
    void on_pushButton_clicked();

private:
    Ui::BigQGraphicsSceneClass ui;

    QImage imgOrig;
};

*。CPP

#include "bigqgraphicsscene.h"
#include <QFileDialog>
#include <QSet>
#include <QDebug>
#include <QGraphicsPixmapItem>

BigQGraphicsScene::BigQGraphicsScene(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    ui.graphicsView->setScene(new QGraphicsScene());
}

BigQGraphicsScene::~BigQGraphicsScene(){}

void BigQGraphicsScene::on_pushButton_clicked()
{
    QString s = "d:/!Qt/ImageNumber/BigQGraphicsScene/TestPic/fastole_bdr.png";

    if (s.length())
    {
        imgOrig.load(s);        
       QGraphicsPixmapItem *itm = new QGraphicsPixmapItem();

       itm->setPixmap(QPixmap::fromImage(imgOrig));

        ui.graphicsView->scene()->setItemIndexMethod(QGraphicsScene::NoIndex);
       ui.graphicsView->scene()->addItem(itm);

       ui.graphicsView->scene()->setSceneRect( imgOrig.rect() );
    }
}

scene()->setItemIndexMethod(QGraphicsScene::NoIndex); - 没有帮助......

几乎透明的pix例如 - fastole_bdr.png

1 个答案:

答案 0 :(得分:0)

您可以在后台加载图片吗?您正在从磁盘读取,然后将图像处理为QT在UI线程内部使用的任何格式,因此应用程序对较大图像没有响应时并不特别令人惊讶。