• 5549阅读
  • 6回复

[提问]为什么connect()函数要写在构造函数内? [复制链接]

上一主题 下一主题
离线彩阳
 

只看楼主 正序阅读 楼主  发表于: 2012-10-21
关键词: QT4新手OpenGL
我照着写了一个简单的NeHe的OpenGL小程序。使用QTimer timer来更新。发现以下两条语句:
C/C++ code
  1. // 初始化定时器
  2. connect( &timer, SIGNAL( timeout( ) ), this, SLOT( updateGLScene( ) ) );
  3. timer.start( 5 );


在构造函数里面能够顺利地计时,而到了InitializeGL()函数(我写的初始化函数)里面就不能计时了。我想是不是connect()函数的限制呢?是不是所有的connect()函数都要写在构造函数里?或者有哪些特例,允许connect()函数写在其它地方?
上海Qt开发联盟,热忱地欢迎你的加入!
离线彩阳

只看该作者 6楼 发表于: 2012-10-22
谢谢啦,查到原因了,是因为我这个Initialize()函数的I是大写,不能由系统自动调用。正确的方法应该写成小写的initializeGL(),这样把connect()函数和start成员函数放入就没有关系。
上海Qt开发联盟,热忱地欢迎你的加入!
离线彩阳

只看该作者 5楼 发表于: 2012-10-22
这个timer是一个数据成员,不是栈上创建的局部变量呢。
上海Qt开发联盟,热忱地欢迎你的加入!
离线ggkuroky
只看该作者 4楼 发表于: 2012-10-21
QTimer *pTimer = new QTimer;
ptimer->start(5);
这样就可以了应该!
相信自己,天道酬勤!
离线ggkuroky
只看该作者 3楼 发表于: 2012-10-21
构造函数里面调用的在析构函数里面释放,在函数里面则出了}要是放掉了,对象不存在了,就无法完成计时了,我是这么理解的,不知道对不对呀!
相信自己,天道酬勤!
离线ffii4455

只看该作者 2楼 发表于: 2012-10-21
我看你用的是“.”运算符,你应该是直接 Qtimer timer;这样声明定时器的吧。
这样会把timer分配的内存栈区,当函数执行完后对应内存会被自动释放,你的timer也就不复存在了。
明白了吧。
离线ninsun

只看该作者 1楼 发表于: 2012-10-21
不需要啊……
connect函数可以写在任何地方
动态调用也是可以的
计时器不被调用的原因可以从
1. timer有没有被正确初始化/激活
2. connect有没有调用成功
这两个方向去查
快速回复
限100 字节
 
上一个 下一个