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