IPCBaseとDispatchDataの2つのクラスがあります。今度は、QDataStreanオブジェクトdrom IPCBaseをDispatchDataに渡したいと思います。まず、Connect Statementを使用して直接送信しようとしました。しかし、それはQDataStreamオブジェクトがQRegisterMatatypeに登録されていないようなエラーを出しています。QDataStreamがReadonlyになっています
編集::私は、だから私は
typedef QDataStream* myDataStrem;
Q_DECLARE_METATYPE(myDataStrem)
のようなものを行って、その後、別のクラス(DispatchData)
connect(mpThrIPCReceiver, SIGNAL(dispatchReadData(const int&, myDataStrem)),
this, SLOT(onIPCDataReceived(const int&, myDataStrem)));
に声明を接続している
同様
When, where and why use namespace when registering custom types for Qt
をこのリンクを参照されています
onIPCData受信スロット
void DispatchData::onIPCDataReceived(const int& msgType, myDataStrem dataReceived)
{
// dataReceived >> str1; Here it is giving error
// qDebug()<<"is"<<str1;
MemberFuncPointer f = mIPCCommandMapper.value(msgType);
(this->*f)(*dataReceived);
//This is function pointer which will rout it to respective function depending on the Message type.
し、それはここ
void DispatchData::onStartCountingCycle(QDataStream &dataReceived)
{
int data = 0;
dataReceived >> data; //Here it is crashing
//Giving error like
//pure virtual method called
//terminate called without an active exception
// I have debugged it and here dataReceived is becoming Readonly.
}
私はあなたを助けることができますが、機能の例を提供してください! – Roland
スレッドを使用しているようです。そのため、自動的に接続がキューに入れられます。その場合は、あなたに伝えられるメッセージとして 'QDataStream'のために[' qRegisterMetatype'](http://doc.qt.io/qt-5/qmetatype.html#details)を呼び出さなければなりません。しかし、これはまだ私にとって非常に奇妙に思えます。どうして 'QDataStream'オブジェクトをスレッド間で送信していますか?実際に何をしようとしているのかを説明してください。これは私にとって[XY問題](http://xyproblem.info)のようです。 – thuga
@thugaここに 'qRegisterMetatype'は必要ありません。 –