ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2.信号和槽

2021-12-30 21:01:58  阅读:159  来源: 互联网

标签:run 信号 void w2 w1 函数


        信号和槽是Qt最为重要的特性之一,它使得对象之间的通信变得简单而高效。在C++中,我们可以用回调函数实现不同对象之间的通信,但是信号和槽更简单易用。

        本质上,信号和槽都是函数,信号只能声明,不能提供定义,而槽函数可以,并且槽函数也可以像普通函数一样使用。

        Qt很多组件都定义了大量默认的信号和槽,但很多时候我们也需要定义自己的信号和槽函数。

        我们使用emit关键字来发出信号,信号被发出后类似于广播,所有组件都将收到该信号,我们需要指定接收该信号的对象,并定义槽函数来处理该信号。

        发出信号背后的本质是Qt的事件循环机制,这将在下一节进行总结。

        作为一个简单的例子,我们创建两个QWidget,分别命名为w1,w2,看如下示例:

/*部分代码*/

/****************** w1.h ***********************/

Public:

void run(  );

signals:

void mySignal_1( QString name );

Private:

QString mName_1;
/****************** w1.cpp***********************/

Constructor{

mName_1 = “MyWidget_1”;

}

void run(  )

{

QTimer *timer = new QTimer( this );

Connect(timer,&QTimer::timeout,[=](){

emit mySignal_1( mName_1 );

});

timer_>start( 1000 );

}
/****************** w2.h ***********************/

Private slots:

void getName( QString name );

/****************** w2.cpp***********************/

w1;

w1.run(  );

Connect( &w1,&QWidget::MySignal_1,&this,&QWidget::getName);
/****************** main.cpp***********************/

Output:

MyWidget_1;

......

        我们在w1中创建了run()函数,一旦w1调用了run()函数,就每隔1秒发出MySignal_1信号。在w2中,连接这个MySignal_1信号,并调用槽函数getName处理这个信号,将w1的名字打印出来。

        基于类似的方法,我们可以在任何窗口中获取我们需要知道的其他窗口的信息,只需将其他窗口的参数传出来即可,并在我们想要获取的地方处理它。

        需要进一步提到的是,不仅可以用槽函数连接信号,也可以用信号连接信号,即用某个信号触发另一个信号的产生。也可以用多个槽函数连接同一个信号。槽函数的参数可以比信号少,即槽函数可以忽略一部分参数,但是槽函数的参数不能比信号的参数多,因为那样的话,便无法工作;

标签:run,信号,void,w2,w1,函数
来源: https://blog.csdn.net/qcs_yxl/article/details/122245199

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有