Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152395
  • 博文数量: 43
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 17:24
文章分类
文章存档

2010年(43)

我的朋友

分类: LINUX

2010-11-23 11:50:49

          信号和槽
小练习
一.定时的实现(代码+UI来实现)
功能:倒计时,按键变灰即点开始以后除非点击暂停,否则不能再去点击开始
关键点:
1.明白信号时谁发出的,发出后谁接收,接收后有什么操作
2.对定时器的理解:启动定时以后就,time就开始不停的发送信号,无论是否有槽进行处理,都在不停的发送,所以,这个时候就需要去建立一个连接,不停的去接收这个信号(这就牵扯到信号和槽的关键点,信号和槽的链接一但建立,就是实时存在的,一旦有信号,槽就去接收并处理)。
3.定时器具体的实现:
首先,需要去声明有这样一个Qtime 的成员指针。
其次,在.cpp中要去为其申请一段空间,确定父子关系。
最后,定时器相关函数调用,来实现定时。
 
代码如下,main函数略去

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
signals:



private:
    Ui::Widget *ui;
    int num;
    QTimer *time;//在QWidget头中对这个已经声明过了

private slots:
    void star_click();
    void stop_click();
    void time_end();


};

#endif
// WIDGET_H


              

#include "widget.h"
#include "ui_widget.h"
#include <QTimer>//记得要去包含这个头
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    num = 10;
    time = new QTimer(this); //申请一段空间,父子关系确定下来
    ui->lcdNumber->display(num);
    ui->stopbutton->setEnabled(false);
    ui->startbutton->setEnabled(true);
   

    connect(ui->startbutton,SIGNAL(clicked()),

                           this,SLOT(star_click()));
    connect(ui->stopbutton,SIGNAL(clicked()),

                             this,SLOT(stop_click()));
    connect(time,SIGNAL(timeout()),

                              this,SLOT(time_end()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::star_click()
{
   ui->startbutton->setEnabled(false);
   ui->stopbutton->setEnabled(true);
   time->start(1000);
}
void Widget::stop_click()
{
    ui->stopbutton->setEnabled(false);
    ui->startbutton->setEnabled(true);
    time->stop();
}

void Widget::time_end()
{
    num--;
    ui->lcdNumber->display(num);
    if(num==0)
    {
        time->stop();
        num = 10;
        ui->stopbutton->setEnabled(false);
        ui->startbutton->setEnabled(true);
    }
}


 
二.圆形滚轮控制(用UI实现)
 
 
阅读(972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~