• 4583阅读
  • 2回复

QT:请教一个定时机制里的信号与槽的问题! [复制链接]

上一主题 下一主题
离线kelvinyeah
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-22
最近在尝试做一个定时响应的小软件,权当练习,以下是别人的例子和部分代码。大体功能是,先显示当前系统时间,然后有设定时间的控件。运行时,该软件的窗体按一定的速度上升,显示系统时间,设定响应时间,设定完毕确定后该窗体按一定速度下降隐藏。到达设定的响应时间时,该窗体再次按一定的速度上升。下面是它的信号与槽链接:

void Alarm::con()
{
  connect(timer,SIGNAL(timeout()),this,SLOT(clockChange()));
  timer->start(1000);

  connect(uptimer,SIGNAL(timeout()),this,SLOT(dialogUp()));
  uptimer->start(20);

  connect(dtimer,SIGNAL(timeout()),this,SLOT(down()));
  dtimer->start(20);

  connect(button,SIGNAL(clicked()),dtimer,SIGNAL(timeout()));

  connect(button,SIGNAL(clicked()),this,SLOT(mini()));

  connect(itimer,SIGNAL(timeout()),this,SLOT(comToCur()));
  itimer->start(20);

  connect(restoreAct,SIGNAL(triggered(bool)),uptimer,SIGNAL(timeout()));

  connect(this,SIGNAL(isCurrentTime()),uptimer,SIGNAL(timeout()));

  connect(itimer,SIGNAL(timeout()),this,SLOT(comToCur()));
  itimer->start(10);

  connect(quitAct,SIGNAL(triggered(bool)),this,SLOT(close()));
};
//clockChange()是现实变化的时间,用于显示系统时间的。
//dialogUp()是窗体上升
//down()窗体下降
//min()是窗体最小化
//comToCur()是一个判断,比较系统时间和设定的时间(个人是这样理解的)
// timer=new QTimer; //控制lcd的时间刷新,系统时间是以QLCDNumber的形式显示的
  uptimer=new QTimer; //控制对话框上升
  dtimer=new QTimer; //控制对话框下降
  itimer=new QTimer;
comToCur()的内容是这样的:
void Alarm::comToCur()
{

  if( QVariant(QTime::currentTime()).toString() == QVariant(timeEdit->time()).toString() )
  {
  QApplication::beep();
  emit isCurrentTime();
  }
};
好,问题是这里的itimer是指什么时间?它跟SLOT(dialogUp())是不是应该有关系呢?
我的理解是:到设定时间时,应该触发的事件是窗体上升,也就是说应该是SLOT(dialogUp())。但是itimer具体是控制什么的?如果是用于判断系统时间和设定的时间是否相等,那么它对应的槽是comToCur(),为什么不是dialogUp()呢?
恕小弟愚钝,看了帮助文档,都是英文,看了以后还是有点似懂非懂...请朋友们说的详细点,多谢啦~
工作与IT关系不大了,从此将编程当乐趣发展!
离线binbinming
只看该作者 1楼 发表于: 2010-04-22
timer 可以和SIGNAL 有关系,是谁emit 信号,this 是SLOT是谁接收信号(也就是槽),timer->start(1000)  每秒钟emit一个timeOut SIGNAL.
离线kelvinyeah
只看该作者 2楼 发表于: 2010-04-26
首先谢LS,但是您所讲的还是信号与槽的基本原理而已。这原理我是懂的,但是遇到上面的问题时就糊涂了...
工作与IT关系不大了,从此将编程当乐趣发展!
快速回复
限100 字节
 
上一个 下一个