Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131069
  • 博文数量: 46
  • 博客积分: 571
  • 博客等级: 准尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 23:57
文章分类

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-04-30 13:10:05

C++ Qt 04:信号与槽机制

摘自:http://www.cnblogs.com/rophie/archive/2012/04/02/qt_signal_slot.html

 

接下来要说的这个例子是要说明如何响应用户的动作Qt提供了信号和槽机制来完成界面操作的响应。

 

我们来新建一个项目,在窗体上分别拖两个控件:Progress BarHorizontalSlider

clip_image001

 

然后选择上面工具栏中的编辑信号/(F4)

clip_image002

 

然后点击HorizontalSlider控件按住不放拖到Progress Bar控件上,会弹出配置连接对话框,分别选择ValueChangedProgress BarsetValue并确定

clip_image003

clip_image005

 

接下来选中进度条在右边的属性栏中将Progress Bar控件的Value值设置为0,编译运行,拖动水平滑动条会看到进度条随着水平滑动条改变。是不是很简单呢。

 

当然,我们也可以写代码来实现这个功能

我们再在窗体上拖一个进度条控件progressBar_2

 

修改mainwindow.cpp中的代码如下:

 

1 #include "mainwindow.h"

2 #include "ui_mainwindow.h"

3

4 MainWindow::MainWindow(QWidget *parent) :

5     QMainWindow(parent),

6     ui(new Ui::MainWindow)

7 {

8     ui->setupUi(this);

9     ui->progressBar_2->setValue(0);

10    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),

ui->progressBar_2,SLOT(setValue(int)));

11}

12

13MainWindow::~MainWindow()

14{

15    delete ui;

16}

 

新增了第九行和第十行,第九行是将后来加的progressBar_2的初始值设为0

 

我们主要来看这一句:

connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar_2,SLOT(setValue(int)));

connect静态函数,用于连接信号槽。这句话的意思就是当horizontalSlider被滑动的时候,它会发出一个valueChanged的信号(SIGNAL),信号可以与槽(SLOT)相连接,以便在发射信号时,与之相关联的槽就会自动执行,而progressBar_2监听到这个信号之后就会执行它的setValue方法。中间传递了int类型的数据,即滑动条当前的值就等于进度条当前的值。

同样disconnect函数可以断开信号槽的连接。

disconnect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));

 

信号和槽并不一定是一一对应的,一个信号可以连接多个槽,一个槽也可以连接多个信号,一个信号还可以与另一个信号连接,这部分内容等到以后用到的时候再说。

 

下节预告:Qt布局管理器

 

作者:

出处:http://rophie.cnblogs.com/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

阅读(1490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~