信号与槽函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

信号与槽函数机制是QT编程的基础,也是QT的一大创新,是通过QT的元对象系统实现。

一、什么是信号和槽函数

信号(Signal):就是在特定条件下被发射的事件,比如QPushButton 最常见的信号就是鼠标单击时发射clicked()信号。

槽函数:当我们收到这个信号后,需要有一个函数对信号响应,这个函数就是槽函数,槽函数跟一般的函数用法一样,只不过槽函数可以跟信号进行关联。当信号被发射时,槽函数将会自动执行。

二、格式

1.第一种格式:

第一种方法:

QMetaObject::Connection QObject::connect(
    	const QObject *sender, //信号的发送者
 		const char *signal,    //发送的信号
   	const QObject *receiver, //接收者
    	const char *method,     //槽函数(信号响应函数)
     	Qt::ConnectionType type = Qt::AutoConnection
 )

Connection 函数是QObject类的一个静态函数,QObject类是所有Qt类的基类,在实际调用Connection 函数时可以忽略前面的限定符。

第二种方法:通过信号与槽函数 传输数据

connect(this,&LoginWidget::sendIPSignal,mainWindow,&MainWindow::on_getIP);//先关联
emit sendIPSignal(ui->iplineEdit->text());//再发送

2.第二种格式

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

代码如下(示例):

connect(this,SIGNAL(sendIPSignal(QString)),mainWindow,SLOT(on_getIP(QString)));

3.使用信号和槽函数实现多界面的数据传输

信号:本质上也是一个函数,可以使用系统预定义的信号,开发者也可以自定义信号,如果

自定义信号,该信号只需要声明(类中),不需要实现

槽:本质上也是一个函数,可以使用系统预定义的槽,开发者也可以自定义槽,如果

自定义槽,该槽需要声明(类中),并且需要实现

第一步:在LoginWidget类中自定义 或者 使用系统预定义好的信号

class LoginWidget : public QWidget
{
    Q_OBJECT//1.如果是自定义的类,想要支持信号和槽的操作,必须要加上宏,声明这个宏,来说明要使用信号和槽
public:
    LoginWidget(QWidget *parent = nullptr);
    ~LoginWidget();

private slots:
    void on_btn1_clicked();

signals://自定义信号
    void sendIPSignal(QString ip);

private:
    Ui::LoginWidget *ui;
};

第二步:在MainWindow类中定义槽函数(类内声明类外实现)

类内声明:
class MainWindow : public QMainWindow
{
    Q_OBJECT //如果一个类中想要使用QT中信号和槽的机制,必须添加这个宏
public slots:
    void on_getIP(QString ip);
}
类外实现:
void MainWindow::on_getIP(QString ip)
{
    qDebug()<<on_getIP<<:<<ip;
    ui->iplabel->setText(ip);
}

总结

  1. 信号和槽中,槽函数的调用是通过信号来完成,所以槽函数的参数类型要跟信号函数的参数类型保持一致,槽的参数个数不大于信号的参数个数
  2. 槽函数的调用,必须要跟对应的信号建立连接关系,通过connect函数来实现连接
  3. 一个信号可以跟多个槽函数相关联
  4. 多个信号可以执行同一个槽函数

    目录

    前言

    一、什么是信号和槽函数

    信号(Signal):就是在特定条件下被发射的事件,比如QPushButton 最常见的信号就是鼠标单击时发射clicked()信号。

    槽函数:当我们收到这个信号后,需要有一个函数对信号响应,这个函数就是槽函数,槽函数跟一般的函数用法一样,只不过槽函数可以跟信号进行关联。当信号被发射时,槽函数将会自动执行。

    二、格式

    1.第一种格式:

    Connection 函数是QObject类的一个静态函数,QObject类是所有Qt类的基类,在实际调用Connection 函数时可以忽略前面的限定符。

    2.第二种格式

    3.使用信号和槽函数实现多界面的数据传输

    第一步:在LoginWidget类中自定义 或者 使用系统预定义好的信号

    第二步:在MainWindow类中定义槽函数(类内声明类外实现)

    总结


  5. 一个信号可以跟另一个信号相关联
  6. 使用信号与槽函数机制必须在类的声明中添加Q_OBJECT宏,因为只有标记该宏的头文件才能让元对象编译器去处理
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值