我有一个从 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(即太小而无法测量)。