当我将 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/