您的位置:首页 > 其它

signals/slots(信号/槽)

2011-08-23 23:45 239 查看
QT-- write once ,compile anywhere.

2011-08-23 星期二 雨(处暑)

Qt的核心机制————信号-槽机制,区别于其他GUI工具的最主要特征。

信号(signal):

当某个信号所对应的客户或其他所有者的内部状态发生改变时,信号被一个对象发射。只有定义过这个信号的类及其派生

类能够发射这个信号。

槽(slot):

被用于接收信号,它们通常是类中的成员函数,一个槽并不知晓是否有一个信号与自己联系,同样,包含有槽函数的对象

也对通信机制一无所知,它们也可以作为一个独立的软件构件。

example:

头文件

/*signaltest.h*/
#ifndef SIGNALTEST_H
#define SIGNALTEST_H
#include <QObject>

class myTest :public QObject
{
Q_OBJECT
public:
myTest()
{
m_value = 0;
}

int getvalue()
{
return m_value;
}

public slots:   //槽函数的定义
//槽函数就是类的成员函数,可以将槽函数当做是普通的成员函数来使用
//槽函数可以和特定的信号(其他槽函数)进行关联(连接),使得当特定的对象发处指定的信号的时候,自动的调用该槽函数
//槽函数一般为void类型的返回,可以带参数也可以不带

void setvalue(int new_value)
{
if(new_value != m_value)
{
m_value = new_value;
//emit用来发出指定的信号
emit valueChanged(m_value); //发送信号
}
}

signals: //定义信号
//信号为void类型返回值的函数,可以传递参数,并且在类中不需要函数的实现
//信号函数的实现由MOC自动完成
void valueChanged(int new_value);

private:
int m_value;
};

#endif // SIGNALTEST_H


主函数

#include <QApplication>
#include <QDebug>
#include "signaltest.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
myTest x, y;
qDebug()<<"x.m_value = "<<x.getvalue();
qDebug()<<"y.m_value = "<<y.getvalue();
//信号和槽函数必须进行关联
//关联以后,当特定的对象(sneder)发出了指定的信号的时候,指定的对象(recerver)会自动的执行相关联号的槽函数(或者发出相关联的信号)
QObject::connect(&x, SIGNAL(valueChanged(int)), &y, SLOT(setvalue(int)));
x.setvalue(123);
qDebug()<<"x.m_value = "<<x.getvalue();
qDebug()<<"y.m_value = "<<y.getvalue();
QObject::connect(&y, SIGNAL(valueChanged(int)), &x, SLOT(setvalue(int)));
y.setvalue(234);
qDebug()<<"x.m_value = "<<x.getvalue();
qDebug()<<"y.m_value = "<<y.getvalue();
//return app.exec();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: