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

标签 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); - 没用...

例如几乎透明的像素 - fastole_bdr.png

最佳答案

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

关于c++ - QGraphicsScene - 添加带有少量不透明点的大透明像素图时,应用程序挂起很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35613183/

相关文章:

c++ - 如何异或这两个 vector 的内容?

c++ - 如何检查2个定义是否相同?

c++ - Q3DScatter --> 如何将不同颜色的点添加到点云中

C++ 错误 : because the following virtual functions are pure within

c++ - 如何在 QGraphicsRectItem 中实现信号槽?子类化 qobject 和 qgraphicsrectitem 但出现错误

c++ - 我如何从此代码中获取大量的递归调用?

c++ - 无法针对 OS X 上的 Boost.log 进行编译

c++ - 如何使用QWebEnginePage::OpenLinkInNewTab [Qt5.8]

c++ - 使用 Qpr​​ocess 运行 ping,如果主机是否可达,退出代码始终为 2

c++ - QGraphicsScene 中的圆弧