为什么我的qglwidget子类需要花费3秒钟来构建?

时间:2013-05-01 08:44:47

标签: qt

我有一个从QGLWidget派生的图像显示小部件。我遇到的问题是这个小部件的初始创建只需要3秒多。这导致在选择要查看的图像和看到窗口之间出现明显的延迟。有人能告诉我造成这种大规模延误的原因吗?我能以任何方式避免它吗?

我已将代码简化为此示例:

class ImageDisplayTest : public QGLWidget
{
Q_OBJECT

public:
    ImageDisplayTest(QWidget *parent = 0)
            : QGLWidget(parent)
    {
            // empty constructor body
    }


protected:
    virtual void initializeGL() {}
    virtual void paintGL() {}
    virtual void resizeGL(int width, int height) {}
};

QElapsedTimer timer;
qint64 time_ms;
timer.start();
ImageDisplayTest* pTest1 = new ImageDisplayTest();
time_ms = timer.elapsed();

timer.restart();
ImageDisplayTest* pTest2 = new ImageDisplayTest();
time_ms = timer.elapsed();

timer.restart();
ImageDisplayTest* pTest3 = new ImageDisplayTest();
time_ms = timer.elapsed();

timer.restart();
ImageDisplayTest* pTest4 = new ImageDisplayTest();
time_ms = timer.elapsed();

实例化pTest1所需的时间是3200ms,接下来的3个项目所花费的时间大约是每个950ms。我使用Qt 4.7.4在Windows 7上运行,并使用Visual Studio 2012(快速版)进行编译和运行。为了比较,如果我从QWidget而不是QGLWidget派生,那么实例化所需的时间将恢复为0ms(即,太小而无法测量)。

1 个答案:

答案 0 :(得分:0)

这是在您的平台上启动OpenGL实施所花费的时间。在Qt 5中,在Windows Vista&你可以选择使用在DirectX上运行的OpenGL ES 2的捆绑ANGLE实现。