0

我有一个从 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 所用的时间为 3200 毫秒,接下来的 3 个项目所用的时间约为 950 毫秒。我在带有 Qt 4.7.4 的 Windows 7 上运行,并且正在使用 Visual Studio 2012(速成版)进行编译和运行。为了比较,如果我从 QWidget 而不是 QGLWidget 派生,则实例化所需的时间返回为 0ms(即太小而无法测量)。

4

1 回答 1

0

这是在您的平台上启动 OpenGL 实现所需的时间。在 Qt 5 中,在 Windows Vista 及以上版本中,您可以选择使用在 DirectX 之上运行的 OpenGL ES 2 的捆绑 ANGLE 实现。

于 2014-01-23T16:46:40.953 回答