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);

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

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

  • 相关阅读:
    大端与小端编号方法的区别
    socket、listen 等函数的打电话隐喻
    windows 网络编程报错 error LNK2019
    有符号数与无符号数之间的转换
    C++ 代码命名建议
    编写启发式代码的方法
    求给定数目的前 n 个素数
    不使用 “+” 实现加法操作
    二叉搜索树中两个节点的旋转
    Python玩转硬件:TPYBoard-Micropython开发板大盘点
  • 原文地址:https://www.cnblogs.com/li-peng/p/3650682.html
Copyright © 2011-2022 走看看