问题简介

本文基于【Qt】窗体间传递数据(跨控件跨类),三种情况与处理方法

已知三个窗体,A 为 B C 的父控件,B 与 C 互为兄弟控件 那么参数传递分三种情况:

  1. B 向 A(C 向 A)传递参数
  2. B 向 C(C 向 B)传递参数
  3. A 向 B(A 向 C)传递参数

三个空间关系模型参考如下,

Responsive Image

B 向 A(C 向 A)传递参数

//B.h
class B
{
signals:
    void toA([ParamList]);
}

//B.cpp
B::B()
{
    emit toA([ParamList]);
}
//A.h
class A
{
private:
   B *b;
private slots:
   void fromB([ParamList]);
}

//A.cpp
A::A()
{
    b = new B;
    connect(b, SIGNAL(toA([ParamList])), this, SLOT(fromB([ParamList])));
}

void A::fromB([ParamList])
{
//get[ParamList]
}

B 向 C(C 向 B)传递参数

//A.h
{
private:
  B *b;
  C *c;
}

//A.cpp
A::A()
{
  b = new B;
  c = new C;
  connect(b, SIGNAL(toC([ParamList]), c, SLOT(fromB([ParamList])));
}

//B.h
class B
{
signals:
 void toC([ParamList]);
}

//B.cpp
B::B()
{
  emit toC([ParamList]);
}

//C.h
class C
{
private slots:
  void fromB([ParamList]);
}

//C.cpp
void C::fromB([ParamList])
{
//get[ParamList]
}

A 向 B(A 向 C)传递参数

//B.h
class B
{
public:
   void fromA([ParamList]);
} 

//B.cpp
void B::fromA([ParamList])
{
//get[ParamList]
}

//A.h
class A
{
private:
   B *b;
}

//A.cpp
A:A()
{
    b = new B;
    b->fromA([ParamList]);
}