여기에 약간의 문제가 있습니다. 나는 신호 & 슬롯에 문제가 있습니다. 나는 의사 코드로 설명하려고 노력할 것이다. 그래서, 여기에 있습니다.여러 객체에 대한 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에 연결해야하는지 이해하고 싶습니다.
내 영어로 죄송합니다. 무슨 뜻인지 이해하지 못한다면, 나는 더 잘 설명하려고 노력할 것입니다.
감사합니다.
"나를 위해 문제를 만듭니다"라는 말의 의미를 이해하지 못합니다. 들어오는 연결을 차별화하려고합니까? 그렇다면 int socketDescriptor를 신호 인수로 사용하여 MyClass 슬롯에서 호출을 구분할 수 있습니다. – Viv
Qt를 처음 사용하기 때문에 조금 혼란 스럽습니다. signal에 socketDescriptor를 전달하면 여전히 많은 신호가 하나씩 전달되는 대신 방출됩니다. 제발 그 작은 예를 보여 주시겠습니까? – Nika
죄송하지만 문제를 이해하지 못합니다. 나는 당신이 무엇을하려고 하는지를 이해한다면 당신에게 보여준 견해를 보여 주려고하지 않는다. 질문을 업데이트하고 예상 출력이 무엇이고 현재 얻고있는 것이 무엇인지 명시 할 수 있습니까? – Viv