1

我这里有点问题。我在信号和插槽方面遇到问题。我会尝试用伪代码来解释。所以,就这样吧。

我有主线程(mainwindow.cpp),当新客户端连接时我正在创建新对象。

主窗口.h:

signals:
   void changeText();
...

主窗口.cpp:

connect(tcpserver, SIGNAL(changeText()), this, SIGNAL(changeText()));

...

MyClass *m = new MyClass(this);
connect(this, SIGNAL(changeText()), m, SLOT(changeText()));

我还有 tcpserver 类,它在客户端连接并连接两个信号时创建新的 QThread。

tcpserver.h:

signals:
    void changeText();
protected:
    void incomingConnection(int handle);

tcpserver.cpp:

void incomingConnection(int handle)
{
    QTcpSocket *s = new QTcpSocket(this);
    s->setSocketDescriptor(handle);
    mythread *thread = new mythread(s, this);
    connect(thread, SIGNAL(changeText()), this, SIGNAL(changeText()));
}

问题如下:我有 3 个对象,主线程,从 QTcpServer 继承的 tcpserver 类,以及从 QThread 类继承的 mythread 类。

当我从“tcpserver”创建新的“mythread”-s 并连接信号时,来自新线程的所有信号都连接到“tcpserver”-s 信号,因此,例如,如果 10 个客户端做某事,所有信号都会发送到“tcpserver “这对我来说是个问题。我想了解应该通过 QTread -> TcpServer -> MainWindow 连接到 MyClass 的哪个信号。

对不起我的英语,如果你不明白我的意思,我会尽力解释得更好。

谢谢你。

4

1 回答 1

0

一些建议:

  • 在您的“incomingConnection(int)”中,我怀疑堆中创建的对象(tcpsocket 和 mythread)是否存在内存泄漏,请使用 tcpserver 中的 QList(或其他容器)来保存在“incomingConnection(int)”中创建的套接字
  • 在您的类前面加上 SLOT(changeText) 的名称,以阐明哪些对象是您的意图发送者/接收者
  • 我不认为你不能像这样连接两个信号

    连接(线程,信号(changeText()),这个,信号(changeText()));

于 2013-03-11T12:41:58.207 回答