Qt开发(三):事件与信号

发布于 2022-08-14 17:49:31 字数 4553 浏览 7 评论 1

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 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱殇璃 2022-08-14 19:23:46

good!!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文