2012年(46)
分类: C/C++
2012-04-30 13:10:05
摘自:http://www.cnblogs.com/rophie/archive/2012/04/02/qt_signal_slot.html
接下来要说的这个例子是要说明如何响应用户的动作,Qt提供了信号和槽机制来完成界面操作的响应。
我们来新建一个项目,在窗体上分别拖两个控件:Progress Bar和HorizontalSlider
然后选择上面工具栏中的编辑信号/槽(F4)
然后点击HorizontalSlider控件按住不放拖到Progress Bar控件上,会弹出配置连接对话框,分别选择ValueChanged和Progress Bar的setValue并确定
接下来选中进度条在右边的属性栏中将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布局管理器
作者:荒 木
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。