zoukankan      html  css  js  c++  java
  • 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);

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

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

  • 相关阅读:
    android.os.NetworkOnMainThreadException 异常处理
    java.lang.SecurityException: Permission denied (missing INTERNET permission?) 解决
    javah 生成header file 报错 问题解决
    AAPT: libpng error: Not a PNG file 问题解决
    Tomcat启动报错 Failed to start component [StandardServer[8005]]解决
    Hibernate
    Linux常用命令总结
    模拟奇数乱码请求问题
    http国际化模拟请求
    db2数据库安装注意几个问题
  • 原文地址:https://www.cnblogs.com/li-peng/p/3650682.html
Copyright © 2011-2022 走看看