小编Ale*_*lex的帖子

QLabel与QGraphicsView的表现

我正在学习QT,我对QLabel和QGraphics视图在平移时的性能差异感到困惑.

我将一个巨大的36Mpixels(D800)jpeg文件读入QLabel或QGraphics对象,并尝试使用QLabel/Graphics拖动全尺寸图像.令人惊讶的是,QLabel提供了非常平滑的运动,而QGRaphicsView平移是生涩的.

简化的QGraphicsView代码是:

QApplication::setGraphicsSystem("raster");    
...
QGraphicsView  view();
view.setDragMode(QGraphicsView::ScrollHandDrag);
view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setFrameStyle(QFrame::NoFrame);
view.showFullScreen();

QGraphicsPixmapItem *pmItem = new QGraphicsPixmapItem(pixMap);
scene.addItem(pmItem); // only one item in the scene
//view.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); // no difference
view.show();
Run Code Online (Sandbox Code Playgroud)

简化的基于QLabel的代码是:

void MyQLabel::mouseMoveEvent(QMouseEvent *event){
    if(_leftButtonPressed) {
            // calculate new {_x, _y} position
            repaint();
        }
    } else super::mouseMoveEvent(event);
}
void MyQLabel::paintEvent(QPaintEvent *aEvent){
    QPainter paint(this);
    paint.drawPixmap(_x, _y, pixMap);
}

... // Somewhere in the code:
MyQLabel _myLabel(NULL);
_myLabel.showFullScreen();
_myLabel.show();
Run Code Online (Sandbox Code Playgroud)

感觉QGraphicsView正在跳过一些位置(快速拖动),而QLabel在所有中间图像上绘制.

我错过了什么?

谢谢Alex

performance qt qgraphicsview qlabel

9
推荐指数
1
解决办法
1337
查看次数

标签 统计

performance ×1

qgraphicsview ×1

qlabel ×1

qt ×1