它編譯罰款,但是當我運行我的程序是這樣的錯誤消息我:中繼信號/插槽,元數據類型
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
我決定我想上面sendGraphData
一個線程上運行,所以dataTest
類中,我加入這個額外的層,其中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
所以裏面額外的層已經此連接:
connect(m_worker, SIGNAL(sendGraphData(QVector<double>,QVector<double>)),
this, SLOT(relaySendGraphData(QVector<double>,QVector<double>)));
那麼對於relaySendGraphData
:
void DataTest::relaySendGraphData(const QVector<double> &valueX, const QVector<double> &valueY)
{
qDebug() << valueX;
emit sendGraphData(valueX, valueY); //should now connect up to the view
}
這應該有效地發射數據從所述螺紋(worker
),到DataTest
類,那麼中繼這個到DataTestTab
(或視圖),所以它不必知道線程的任何內容。
它甚至沒有輸入relaySendGraphData
,如果我刪除了額外的連接層,則錯誤消息將消失。
任何想法,爲什麼這不工作?
爲你的'connect'告訴你,你需要註冊'QVector'的'MetaObjectSystem',據我所知正是@Chernobyl發佈 –
Zaiborg
2014-09-27 11:51:01
所以我添加他的行到我的構造函數? – fiz 2014-09-27 11:51:55
添加到我的構造函數,它的工作,也將嘗試命名空間=) – fiz 2014-09-27 11:54:56