如何在Qt中写两个类,它们可以相互发信号与接收信号

转自:http://bbs.csdn.net/topics/390147200

A.h

C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef A_H
#define A_H
 
#include <QObject>
#include <QDebug>
class  A :  public  QObject
{
     Q_OBJECT
public :
     explicit  A(QObject *parent = 0) :
         QObject(parent)
     {
     }
     void  sendSignalToB()
     {
         emit toB();
     }
signals:
     void  toB();
public  slots:
     void  fromB()
     {
         qDebug() <<  "i am A ,Rcv from B." ;
     }
};
 
#endif // A_H


B.h
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef B_H
#define B_H
 
#include <QObject>
#include <QDebug>
class  B :  public  QObject
{
     Q_OBJECT
public :
     explicit  B(QObject *parent = 0) :
         QObject(parent)
     {
     }
     void  sendSignalToA()
     {
         emit toA();
     }
signals:
     void  toA();
public  slots:
     void  fromA()
     {
         qDebug() <<  "i am B ,Rcv from A." ;
     }
     
};
 
#endif // B_H


main.cpp
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <QtCore/QCoreApplication>
#include "a.h"
#include "b.h"
#include <QDebug>
 
int  main( int  argc,  char  *argv[])
{
     QCoreApplication app(argc, argv);
     
     A *a =  new  A;
     B *b =  new  B;
     app.connect(a, SIGNAL(toB()), b, SLOT(fromA()));
     app.connect(b, SIGNAL(toA()), a, SLOT(fromB()));
 
     a->sendSignalToB();
     b->sendSignalToA();
 
     return  app.exec();
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt中,信号和槽是通过连接来实现的。当一个对象发射一个信号时,如果有其他对象连接了该信号,那么该信号就会触发连接的槽函数。因此,在实现两个界面相互通信时,需要在一个对象中定义信号,在另一个对象中连接该信号,并在槽函数中处理信号。 具体来说,如果要实现两个界面相互通信,可以在其中一个界面中定义一个信号,然后在另一个界面中连接该信号,并在槽函数中处理信号。连接信号和槽可以在界面的构造函数中进行,也可以在需要时进行。例如: 在一个界面中定义信号: ``` class ClassA : public QWidget { Q_OBJECT signals: void signalA(const QString& data); }; ``` 在另一个界面中连接信号,并在槽函数中处理信号: ``` class ClassB : public QWidget { Q_OBJECT public: ClassB(ClassA* classA, QWidget* parent = nullptr) : QWidget(parent) { // 连接信号和槽 connect(classA, &ClassA::signalA, this, &ClassB::slotB); } private slots: void slotB(const QString& data) { // 处理信号 qDebug() << "ClassB received signal: " << data; } }; ``` 在上面的例子中,ClassB构造函数中连接了ClassA的signalA信号,并将其连接到ClassB的slotB槽函数中。当ClassA发射signalA信号时,ClassB中的slotB槽函数将会被触发,并处理信号。 需要注意的是,信号和槽的连接应该在两个对象创建后进行,否则可能会出现连接失败的情况。另外,当两个对象中有一个被销毁时,需要手动断开信号和槽的连接,以避免出现野指针等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值