2013-03-09 4 views
1

여기에 약간의 문제가 있습니다. 나는 신호 & 슬롯에 문제가 있습니다. 나는 의사 코드로 설명하려고 노력할 것이다. 그래서, 여기에 있습니다.여러 객체에 대한 Qt 신호 및 슬롯

새 클라이언트가 연결될 때 새 객체를 만들고있는 주 스레드 (mainwindow.cpp)가 있습니다.

mainwindow.h :

signals: 
    void changeText(); 
... 

mainwindow.cpp :

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

... 

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

나는이 또한 클라이언트가 연결 모두 신호를 연결할 때 새 QThread를 만들어 tcpserver는 클래스.

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는 클래스와 mythread이 QThread 클래스에서 상속받은 클래스.

"tcpserver"에서 새로운 "mythread"-s를 작성하고 신호를 연결할 때 새로운 스레드의 모든 신호는 "tcpserver"-s 신호에 연결됩니다. 예를 들어 10 명의 클라이언트가 작업을 수행하면 모든 신호는 다음과 같습니다. 나를 위해 문제가되는 "tcpserver"로 보냈습니다. QTread -> TcpServer -> MainWindow를 통해 어떤 신호를 MyClass에 연결해야하는지 이해하고 싶습니다.

내 영어로 죄송합니다. 무슨 뜻인지 이해하지 못한다면, 나는 더 잘 설명하려고 노력할 것입니다.

감사합니다.

+0

"나를 위해 문제를 만듭니다"라는 말의 의미를 이해하지 못합니다. 들어오는 연결을 차별화하려고합니까? 그렇다면 int socketDescriptor를 신호 인수로 사용하여 MyClass 슬롯에서 호출을 구분할 수 있습니다. – Viv

+0

Qt를 처음 사용하기 때문에 조금 혼란 스럽습니다. signal에 socketDescriptor를 전달하면 여전히 많은 신호가 하나씩 전달되는 대신 방출됩니다. 제발 그 작은 예를 보여 주시겠습니까? – Nika

+0

죄송하지만 문제를 이해하지 못합니다. 나는 당신이 무엇을하려고 하는지를 이해한다면 당신에게 보여준 견해를 보여 주려고하지 않는다. 질문을 업데이트하고 예상 출력이 무엇이고 현재 얻고있는 것이 무엇인지 명시 할 수 있습니까? – Viv

답변

0

제안 :에

  • 당신의 "incomingConnection (INT)", 난, 당신의 tcpserver는에 QList (또는 다른 용기)를 사용하여 힙 (tcpsocket 및 mythread)에서 만든 객체에 대한 메모리 누수를 의심 오브젝트를 명확하게 수업에
  • 접두사 SLOT (changeText)의 이름 난 당신이 같은 두 개의 신호를 연결하지 못할 것 같아요 당신들이 의도 송신자/수신자
  • 당신의에서 생성 된 소켓 "incomingConnection (int)를"잡아

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

+0

> 두 신호를 연결할 수는 없다고 생각합니다. 할 수 있습니다. 문서 읽기 :-) P.S 이미 TCP 소켓 목록을 저장하고 있으며 QMap을 사용하여 스레드를 저장합니다. 감사. – Nika

+0

@Flowz, 두 개의 신호 연결에 대한 정보를 보내 주셔서 감사합니다. –

+0

문제 :-) 때로는 매우 유용합니다. – Nika