QT / c ++调用父方法的最佳方法

时间:2013-10-01 10:55:59

标签: c++ qt callback slot qt-signals

我需要使用A类中的方法(称为write)来控制文件I / O.然后通过调用A.write()来实现需要写入文件的另一个类B(不基于A)

实现这一目标的最佳方法是什么?

我应该将Class.functionname(A.write)作为参数传递给B.sometfunction进行回调吗?

我应该将A.write设为一个插槽,并允许B发出信号吗?

有更好的方法吗? (我正在使用QT 5和C ++)


好的,还有一些信息可以帮助解释: A是一组线程,每个都是TcpSocket(来自客户端的控制台会话) B是我的记录器类,是单例模式。 线程有时必须将消息记录到文件中,B使用互斥锁格式化并写入文件。 应将这些相同(格式化)的消息写入控制台(每个A线程的唯一套接字,因此不能是静态方法)。 所以A.something调用B.write(到文件),然后B.write需要调用A.write(到控制台)。

2 个答案:

答案 0 :(得分:3)

使A.write()公开并给出A到B的指针或使用信号/槽连接,而在B中只使用emit mysignal(data);它连接到插槽A.write()...

答案 1 :(得分:1)

使用信号/插槽连接机制将B信号write()连接到公共A广告位doWrite()。或者,只需公开A::write()方法static,然后从B

调用它
void B::write() {
    A::write();
    //...
}

或者只是将A的指针或引用传递给类B的对象,并通过此指针/引用调用公共方法。

void B::write(A& a) {
    a.write();
    //...
}

作为旁注,请重新考虑您的设计。我相信你确实觉得这里有些不对劲。通常,这是在B(是A的成员)中创建的A实例。

class A{
  B b;
  void write(){
    B.write();  // clear
  }
};

在您的方法A中创建一个对象,该对象回调父母来完成工作。

class A{
  B b;
  void foo(){
    B.write(
    // hey hey, I want A.write() come back!  -> confusing oOO
   );
  }
};
相关问题