我有一个从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(即,太小而无法测量)。
答案 0 :(得分:0)
这是在您的平台上启动OpenGL实施所花费的时间。在Qt 5中,在Windows Vista&你可以选择使用在DirectX上运行的OpenGL ES 2的捆绑ANGLE实现。