우분투 14.04에서 Qt 4.8을 사용하고 있습니다.Qt :이 코드에 대한 신호 인수를 올바르게 정의하는 방법은 무엇입니까?
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(data);
}
-
(헤더 파일)을 newMessage
신호를 정의 할 수있는 적절한 방법이 될 것입니다 무엇 :
현재, 나는 다음과 같은 코드 조각이
signals:
void newMessage(const QByteArray & newData);
또는 :
signals:
void newMessage(QByteArray newData);
상기 한 바와 같이, 신호는 함수이므로 QByteArray data
은 신호를 방출 한 직후 더 이상 존재하지 않습니다 ...
신호를 정의하는 첫 번째 방법에 대한 걱정은 객체 (인스턴스)에 대한 참조를 인수로 전달한다는 것입니다 newMessage
이 방출 된 후에 더 이상 존재하지 않습니다.
시간과 인내심에 미리 감사드립니다.
현재 : 내 응용 프로그램은 단일 스레드입니다.
추신 : 응용 프로그램이 멀티 스레드 일 경우 상황이 달라질 수 있습니까?
정확하게 기억하면 QObject를 복사 할 수 없으므로 값으로 전달할 수 없습니다 ... 이제 QObject에 대해 언급했습니다 :) –
어쨌든 포인터 또는 참조 - 그다지 중요하지 않습니다. 값으로 데이터 객체를 전달할 필요는 없습니다.) 결국, 참조는 자동 간접 지정을 사용하는 상수 포인터로 볼 수 있습니다 (즉, 컴파일러가 * 연산자를 넣습니다). –
그렇게하지 마십시오. OP가 걱정되는 문제가 발생합니다 (연결 유형이'Qt :: QueuedConnection' 인 경우). 'QObject'는 값에 의해 전달 될 수 없기 때문에 보통 포인터 값에 의해 전달됩니다 (복사가 불가능합니다). 'QByteArray'는'QObject'가 아니고 복사가 가능하며 포인터로 전달할 이유가 없습니다. – Mike