zoukankan      html  css  js  c++  java
  • 第四讲 深入介绍信号与槽

    本文概要:讲解Qt的信号与槽机制,涉及信号与槽的连接方法,连接条件等。

    可以使用信号与槽机制的类

    信号与槽机制是在QObject类中实现的,这种机制能够用与任何QObject子类中,但是应该在类中加入Q_OBJECT宏。

    槽的介绍

    槽与普通的c++成员函数几乎一样;槽能够被声明为虚函数,能被重载,能够被其他函数调用等,与c++普通

    的成员函数不同之处仅仅在于槽可以与信号连接在一起,每当发射与槽可以接受的信号时,槽会被自动调用。

    槽与信号的连接方法:

    connect(sender, SIGNAL(signal), receiver, SLOT(slot));

    sender和receiver都应该为指向QObject的指针,signal与slot为不带参数的函数名;SIGNAL与SLOT宏会将它们的参数转换为相应的字符串。

    槽与信号连接的可能情况:

    一个信号连接多个槽

    connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int))); connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updataStatusBarIndicator(int)));

    当发射信号时,会以不确定的顺序调用这些槽;

    多个信号连接一个槽

    connect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError())); connect(calculator, SIGNAL(divisionByZeor()), this, SLOT(handleMathError()));

    无论发射那个信号都会调用连接的槽;

    信号可以与另外一个信号连接:

    connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updataRecord(const QString &)));

    当发射第一个信号时,第二个信号也会被发送,除此之外,信号的相互连接与信号与槽的连接难以区分。

    信号与槽(或者信号)的连接可以被移除

    disconnect(lcd, SIGNAL(overflow( )), this, SLOT(handleMathError( )));

    一般情况下较少用到。另外,当删除对象时,Qt会自动与这个对象相关的所有连接;

    信号与槽(或者信号)成功连接的条件

    信号与槽的顺序必须有相同的顺序与相同的类型,如果信号的参数比它所连接的槽的参数多,多余的参数会被忽略。另外,在信号与槽使用connect()连接时,

    信号与槽的名字中不能包含参数名。

     

  • 相关阅读:
    MyBatis 笔记
    Python os模块、os.path模块常用方法
    vue-lazyload 的使用(vue图片懒加载)
    使用 vant 的 v-lazy 实现图片 vue 在移动端的懒加载
    代码注释规范-IDEA 配置 Java 类方法注释模板
    Java Web 笔记(杂)
    tortoisegit使用
    git结合github远程仓库使用
    .doc 2 .docx可用代码
    惊奇,MySQL还能正则匹配,简易例子
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4419168.html
Copyright © 2011-2022 走看看