그것은 잘 컴파일,하지만 난 내 프로그램을 실행할 때이 나는 오류 메시지입니다 : 첫 번째 부분은 잘 실행중인릴레이 신호/메타 데이터 형식으로 슬롯
QObject::connect: Cannot queue arguments of type 'QVector<double>'
(Make sure 'QVector<double>' is registered using qRegisterMetaType().)
나는 또 다른 레이어를 추가 할 때, 그것은 (의를 다른 말로하면 릴레이)이 새로운 오류 메시지가 나타납니다.
connect(&m_dataTestTab, SIGNAL(notifyAddGraph()),
&m_dataTest, SLOT(createGraph()));
connect(&m_dataTest, SIGNAL(sendGraphData(QVector<double>,QVector<double>)),
&m_dataTestTab, SLOT(drawGraph(QVector<double>,QVector<double>)));
설정과 같은했다이 시점에서 : 그래서이 일을하는 부분입니다
Press a button -> create some data -> emit data back to the view and draw graph
나는, 나는 dataTest
클래스 내부에 있으므로 위의 sendGraphData
이 스레드에서 작동하는 것을 원했다 나는 worker
클래스가 자신의 스레드에이 추가 레이어를 추가, 그래서 설정은 이제 다음과 같습니다
Press a button -> notifies DataTest to launch a thread -> emit data from thread -> relay data from DataTest to the view -> draw my graph in the view
을 그래서내부의 추가 레이어 relaySendGraphData
위해 그
connect(m_worker, SIGNAL(sendGraphData(QVector<double>,QVector<double>)),
this, SLOT(relaySendGraphData(QVector<double>,QVector<double>)));
을 :이 접속했습니다 다음 DataTestTab
이것을 중계 DataTest
클래스 스레드 (worker
)로부터
void DataTest::relaySendGraphData(const QVector<double> &valueX, const QVector<double> &valueY)
{
qDebug() << valueX;
emit sendGraphData(valueX, valueY); //should now connect up to the view
}
이 효과적으로 방출해야 데이터 (또는 보기) 그래서 스레드에 대해 알 필요가 없었습니다.
심지어 relaySendGraphData
을 입력하지 않아도 연결 레이어를 제거하면 오류 메시지가 사라집니다.
이것이 작동하지 않는 이유는 무엇입니까?
을'connect' 당신을 알려줍니다 당신, 당신은'MetaObjectSystem'에''QVector을 등록해야 AFAIK 그냥 뭐 @Chernobyl –
Zaiborg
을 게시 했으므로 생성자에게 그의 라인을 추가합니까? – fiz
그것을 내 생성자에 추가하면 작동하고 네임 스페이스도 시도 할 것입니다 =) – fiz