zoukankan      html  css  js  c++  java
  • QT学习记录之理解信号槽机制

    作者:朱金灿

    来源:http://blog.csdn.net/clever101


             QT的事件机制采用的信号槽机制。所谓信号槽机制,简而言之就是将信号和信号处理函数绑定在一起,比如一个按钮被单击是一个信号,这个按钮的单击处理函数就是一个信号处理函数。因此信号槽机制是需要指定四个参数:信号发送者、发送者、信号接收者和信号处理函数。下面以一个简单的代码示例来说明:

    #include "stdafx.h"
    #include <QtGui/QApplication>
    
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	QPushButton* pButton = new QPushButton("Quit");
    	QObject::connect(pButton,SIGNAL(clicked()),&app,SLOT(quit()));
    
    	pButton->show();
    	return app.exec();
    }

            在这段代码中,当单击按钮时,按钮会发送clicked()消息,这个消息可以连接到一个函数上(这个函数在这里成为slot)。这样,当一个消息发送时,slot函数可以自动执行。其中QObject::connect函数的语法如下:connect(snder,SIGNAL(signal),receiver,SLOT(slot));

    Sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。SIGNAL()和SLOT()宏的作用是把他们转换成字符串。

     

    信号槽机制有以下规则:

    1.一个信号可以连接到多个槽,当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。

     

    2.多个信号可以连接到一个槽,任何一个信号发出,槽函数都会执行。

    3.一个信号可以和另一个信号相连,第一个信号发出后,第二个信号也同时发出。除始之外

    ,信号与信号连接上和信号和槽连接相同。

     

    4.连接disconnect函数删除,这个函数很少使用,一个对象删除后,Qt自动删除这个对象的所有连接。

     

    5.信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接。如果信号里的参数个数多于槽函数的参数,多余的参数被忽略。如果参数类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。

     






  • 相关阅读:
    区间DP——石子合并
    线性DP-最短编辑距离、编辑距离
    生成树协议
    交换机技术
    以太网原理
    接口知识点
    目前在中国有影响的几种现场总线比较
    委托
    C#有关继承知识点
    C#数组总结
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470285.html
Copyright © 2011-2022 走看看