一、前言
信号与槽是Qt编程的基础,也是Qt的一大创新。因为有了信号与槽的编程连接机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。
信号(SIGNAL)是在特定情况下被发送的时间,槽(SLOT)则是对信号进行响应的函数。
熟练掌握槽与信号可以比较容易的将信号与响应代码关联起来。
本文制作一个充电演示动画来进行槽与信号的理解。
二、具体实现
1.设计ui界面
双击.ui文件,拖动两个pushbutton以及一个progress bar进行ui布局,设置两个按键的objectname分别为btn_start和btn_end。
2.设计槽函数
根据功能分析,槽函数一共有三个,start,end以及时间控制
代码如下:
private slots:
void doProcessStart(bool);
void doProcessEnd(bool);
void doProcessTimeout();
3.初始化,连接信号与槽
设计init函数用来进行信号与槽的连接以及部分变量的初始化
void Widget::Init()
{
num = 0;
connect(ui->btn_start,SIGNAL(clicked(bool)),this,SLOT(doProcessStart(bool)));
connect(ui->btn_end,SIGNAL(clicked(bool)),this,SLOT(doProcessEnd(bool)));
myTimer =new QTimer(this);
connect(myTimer,SIGNAL(timeout()),this,SLOT(doProcessTimeout()));
}
connent()用于连接槽与信号
4.编写函数功能
启动函数需要控制动画的开始,使用start()函数进行计时器的运行,设置参数,start()将在参数间隔内重复启动计时器,暂停函数使用stop()进行控制。
计时器则使用myTimer变量进行控制,同时连接槽函数进行显示,每当调用槽函数时,设置num记录并显示数字。
void Widget::doProcessStart(bool)
{
//启动
myTimer->start(100);
}
void Widget::doProcessEnd(bool)
{
//暂停
myTimer->stop();
}
void Widget::doProcessTimeout()
{
num++;
if(num == 101)
{
num=0;
}
ui->progressBar->setValue(num);
}