免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5507 | 回复: 1
打印 上一主题 下一主题

Qt开发(三):事件与信号 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-08 03:20 |只看该作者 |倒序浏览
http://xizhizhu.blogspot.com/2008/11/qt_07.html

事件与信号是Qt中一个很重要的概念,用来对用户的操作等做出响应。在Qt中,信号被成为SIGNAL,响应被称为SLOT,信号和响应间需要进行多对多的绑定。此外,信号也可以和其他信号进行绑定。

先看一个例子。
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QPushButton quit("Quit");

    QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

    quit.show();
    return app.exec();
}

当点击按钮quit后,会发出一个clicked信号,并传递给app,响应为quit,其间的关系是通过QObject::connect()函数进行绑定的。

进行绑定的函数定义如下:
static bool QObject::connect (
const QObject * sender,
const char * signal,
const QObject * receiver,
const char * method,
Qt::ConnectionType type = Qt::AutoConnection );


这里,signal就是信号,是信号发送者sender的一个函数;method就是响应,是信号接收者receiver的一个函数。因此,我们可以定义自己的信号和响应,而信号和响应可以拥有任意数量、任意类型的参数。

定义头文件如下:
#include <QObject>
#include <iostream>
using namespace std;


class Test : public QObject

{

Q_OBJECT


public:

Test()

{

m_value = 0;

}

Test(char name)

{

m_value = 0;

m_name = name;

}


public slots:

void setValue(int value)

{

m_value = value;

emit valueChanged(value);
// 发出一个valueChanged信号
cout <
< m_name << ": " << m_value << endl;
}

signals:

void valueChanged(int newValue);


private:

int m_value;

char m_name;

};


定义源码文件如下:
#include <QApplication>

#include <QPushButton>


#include "test.h"


int main(int argc, char *argv[])

{

QApplication app(argc, argv);


Test a('a'), b('b');

QObject::connect(&a, SIGNAL(valueChanged(int)),
&b, SLOT(setValue(int)));
a.setValue(12);

b.setValue(48);


return app.exec();

}


编译并运行该程序,就能看到如下输出:
b: 12
a: 12
b: 48

当程序运行到a.setValue时,会发出一个valueChanged信号,被b捕获,并调用b.setValue处理。但是,当b.setValue运行时,尽管也发出了valueChanged信号,但没有定义与其相关的绑定,故不会被任何SLOT捕获和处理。


[ 本帖最后由 zxz1984 于 2008-11-8 03:22 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-12-01 00:02 |只看该作者
good!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP