• Qt学习笔记 信号和槽


    槽和普通c++成员函数一样只可以为虚函数,也可以被重用,可以是公有的也可以是私有的,也可以被其它的c++函数调用;

    参数也是任意的

    唯一不同的是本槽和信号是可以连在一起的,和c#的事件差不多。相连后每当发射这个信号后就会自动调用这个槽

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

    sender就发送信号的Qobject指针

    receiver是槽的Qobject指针

    signal和slot是只有形参的函数名。SIGNAL和SLOT宏会把它们的参数转换为相应的字符串

    1.一个信号可以连接多个槽

    在发射信号的时候顺序不确定

    .h

        private slots:
            void Open1();
            void Open2();

    .app

    myQt::myQt(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
        QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1()));
        QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open2()));
    }
    
    void myQt::Open1()
    {
        QMessageBox msg;
        msg.setText("Open1!");
        msg.exec();
    }
    void myQt::Open2()
    {
        QMessageBox msg;
        msg.setText("Open2!");
        msg.exec();
    }

    2.多个信号可以连接同一个槽

    QObject::connect(ui.btn_Open,SIGNAL(clicked()),this,SLOT(Open1()));
        QObject::connect(ui.btn_ClickBool,SIGNAL(clicked()),this,SLOT(Open1()));

    3.一个信号可以与另外一个信号相连

        QObject::connect(ui.btn_Open,SIGNAL(clicked()),ui.btn_ClickBool,SLOT(click()));

    4连接可以被删除

    删除所有的连接

        QObject::disconnect(ui.btn_Open,0,0,0);
        //或者
        ui.btn_Open->disconnect();

    删除指定的连接

        QObject::disconnect(ui.btn_Open,SIGNAL(clicked()),0,0);
        //或者
        ui.btn_Open->disconnect(SIGNAL(clicked()));

    删除两个关联对象的连接

        QObject::disconnect(ui.btn_Open,0,ui.btn_ClickBool,0);
        //或者
        ui.btn_Open->disconnect(ui.btn_ClickBool);

    要把信号成功的连接到槽(或者是连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型。

    这里有个例外,如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被忽略

  • 相关阅读:
    python,生产环境安装
    neo4j 图数据库
    RNN系列
    机器学习关于AUC的理解整理
    fensorflow 安装报错 DEPENDENCY ERROR
    dubbo Failed to check the status of the service com.user.service.UserService. No provider available for the service
    使用hbase遇到的问题
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
    gradle 安装
    jenkins 安装遇到的坑
  • 原文地址:https://www.cnblogs.com/li-peng/p/3650682.html
Copyright © 2020-2023  润新知