• 9943阅读
  • 9回复

startTimer()与timerId()的问题 [复制链接]

上一主题 下一主题
离线随云
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-31
— 本帖被 XChinux 执行加亮操作(2010-10-31) —
本来timerId()应该等于1的时候变为16777217了,请问这是怎么回事?谢谢!
源码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->label->setText(tr(""));
    ui->label_2->setText(tr(""));
    qsrand(time(0));
    startTimer(1000);
    startTimer(5000);
    startTimer(10000);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::timerEvent(QTimerEvent *t)
{
    switch(t->timerId())
    {
    case 1:
        ui->label->setText(tr("每秒产生一个随机数:%1").arg(qrand()%10));
        break;
    case 2:
        ui->label_2->setText(tr("5秒后软件将关闭"));
        break;
    case 3:
        qApp->quit();
        break;
    }
}
离线dbzhang800

只看该作者 1楼 发表于: 2010-10-31
我问一下:"本来timerId()应该等于1",这个结论是如何得出的?
离线随云
只看该作者 2楼 发表于: 2010-10-31
回 1楼(dbzhang800) 的帖子
第一个starttimer()的timerId()不是就应该为1吗?
离线dbzhang800

只看该作者 3楼 发表于: 2010-10-31
Re:回 1楼(dbzhang800) 的帖子
引用第2楼随云于2010-10-31 12:55发表的 回 1楼(dbzhang800) 的帖子 :
第一个starttimer()的timerId()不是就应该为1吗?

你的代码已经回答你的疑问了。
离线随云
只看该作者 4楼 发表于: 2010-10-31
回 3楼(dbzhang800) 的帖子
代码有错么?
离线dbzhang800

只看该作者 5楼 发表于: 2010-10-31
Re:回 3楼(dbzhang800) 的帖子
引用第4楼随云于2010-10-31 21:38发表的 回 3楼(dbzhang800) 的帖子 :
代码有错么?

你先提出一个猜想:"id可能是1"。然后你的代码已经证实不是1,即 你的猜想错误。

这不已经很充分了么?
离线随云
只看该作者 6楼 发表于: 2010-11-01
回 5楼(dbzhang800) 的帖子
可是我看了好多资料都说那个ID应该是为1的啊
离线dbzhang800

只看该作者 7楼 发表于: 2010-11-01
Re:回 5楼(dbzhang800) 的帖子
引用第6楼随云于2010-11-01 17:38发表的 回 5楼(dbzhang800) 的帖子 :
可是我看了好多资料都说那个ID应该是为1的啊

我一开始不就是问你这个问题么?到现在你也没给出证据。

比如,Qt Manual 中那一页提到的,Qt官方网站哪篇文章提到的等等...
离线simon_shen
只看该作者 8楼 发表于: 2010-12-02
你可以用f(timer->timerId()==?)
        {
            sec++;
            if(sec==60)
         {
                sec=0;
                min++;
            }
        }
    QString str=temp.setNum(sec);//setNum将数字转换成字符
    ui->label_2->setText(str);
看看,我这里得出的是timer->timerId()==2,我只用了一个startTimer(1000),http://qt.csdn.net/articles.aspx?pointid=287&pointid2=
内说一个startTimer(),timer->timerId()==1
离线simon_shen
只看该作者 9楼 发表于: 2010-12-02
这样就可以用 this->killTimer(2);把startTimer(1000)杀掉了
快速回复
限100 字节
 
上一个 下一个