• 8591阅读
  • 12回复

[提问]qtimer使用stop函数不能终止qtimer调用的槽函数 [复制链接]

上一主题 下一主题
离线ljxsheep
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-28
关键词: 问题qtimer进程
  1. 这是Qtimer   start和stop所在的地方,还有一个void timerrenDone()函数,按下走动的人开始按钮,timeren函数执行,然后按下走动的人结束按钮,timerren函数仍然在执行,是我的timer函数用错了,还是timerrenDone()的问题
  2. void Widget::on_pushButton_clicked()//走动的人开始按钮
  3. {
  4.     ui->label->show();
  5.     ui->label_2->show();
  6.     ui->label_3->show();
  7.     ui->label_4->show();
  8.     ui->label_5->show();
  9.     ui->label_6->show();
  10.     ui->pushButton->hide();
  11.     ui->pushButton_3->show();
  12.    QTimer *timerren=new QTimer;
  13.    timerren->start(100);
  14.    connect(timerren,SIGNAL(timeout()),this,SLOT(timerrenDone()));
  15.     ui->pushButton->hide();
  16. }
  17. void Widget::on_pushButton_3_clicked()//走动的人结束按钮
  18. {
  19. timerren->stop();
  20.     ui->label->hide();
  21.     ui->label_2->hide();
  22.     ui->label_3->hide();
  23.     ui->label_4->hide();
  24.     ui->label_5->hide();
  25.     ui->label_6->hide();
  26.     ui->pushButton_3->hide();
  27.     ui->pushButton->show();
  28. }


离线uidab

只看该作者 1楼 发表于: 2012-06-29
disconnect它的槽函数,试试.
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线jdwx

只看该作者 2楼 发表于: 2012-06-29
timerren->stop();这个timer哪里来的

这个是上面的函数,new出的是一个函数内的变量,和stop的不是同一个变量
QTimer *timerren=new QTimer;
   timerren->start(100);
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线benbenmajia

只看该作者 3楼 发表于: 2012-06-29
局部变量的作用域是不能在其他地方使用的。
安然.....
离线lwtlwt0810

只看该作者 4楼 发表于: 2012-06-29
不知道你是在哪里stop的,你这个应该是会一直跑的
离线uidab

只看该作者 5楼 发表于: 2012-06-29
回 2楼(jdwx) 的帖子
哎,看来不能熬夜后看代码了,他这个局部变量和全局变量的问题都没看出来。

还有就是点击一次connect一次,这样太不好了。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线ljxsheep
只看该作者 6楼 发表于: 2012-06-29
那该怎么声明呢,要想使timerren在这两个函数中是同一个
离线ljxsheep
只看该作者 7楼 发表于: 2012-06-29
回 5楼(uidab) 的帖子
也发现点一次connect一次,该怎么改动
离线jdwx

只看该作者 8楼 发表于: 2012-06-29
回 7楼(ljxsheep) 的帖子
构造函数里new和connect
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ljxsheep
只看该作者 9楼 发表于: 2012-06-29
回 4楼(lwtlwt0810) 的帖子
局部和全局没分清
离线ljxsheep
只看该作者 10楼 发表于: 2012-06-29
回 8楼(jdwx) 的帖子
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    Qt::WindowFlags flags=Qt::Popup;
    setWindowFlags(flags);

    ui->setupUi(this);
    QTimer* timerren=new QTimer;
   connect(timerren,SIGNAL(timeout()),this,SLOT(timerrenDone()));
  
    ui->tabWidget->hide();


}
构造函数是这样的,调试异常退出。原因是
dENDLESS LOOP: SOMETHING NEEDED: {iname="local.timerren",sortId="0",name="timerren",addr="0x22fdf8",exp="*(*)0x22fdf8",value="<not accessible>",type=<needed>,hasChildren=<needed>},找不到原因,刚刚开始学qt,c++以前也没学过
离线ljxsheep
只看该作者 11楼 发表于: 2012-06-30
回 2楼(jdwx) 的帖子
搞定了,刚开始学,有些细节没注意。在函数外声明一个QTimer *timerrren;
然后再你的on_pushButton_clicked()中timerren = new QTimer;
但是构造函数那是怎么回事,有点不明白
离线ljxsheep
只看该作者 12楼 发表于: 2012-06-30
回 3楼(benbenmajia) 的帖子
刚开始学,有些细节没注意,已经搞定了,
谢谢
快速回复
限100 字节
 
上一个 下一个