2014-09-27 46 views
0

它編譯罰款,但是當我運行我的程序是這樣的錯誤消息我:中繼信號/插槽,元數據類型

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,如果我刪除了額外的連接層,則錯誤消息將消失。

任何想法,爲什麼這不工作?

+1

爲你的'connect'告訴你,你需要註冊'QVector '的'MetaObjectSystem',據我所知正是@Chernobyl發佈 – Zaiborg 2014-09-27 11:51:01

+0

所以我添加他的行到我的構造函數? – fiz 2014-09-27 11:51:55

+0

添加到我的構造函數,它的工作,也將嘗試命名空間=) – fiz 2014-09-27 11:54:56

回答

3

嘗試這種情況:

qRegisterMetaType<QVector<double> >("QVector<double>"); 

編譯細,因爲與信號和槽通常誤差可以在運行時被檢測到。

文件:http://qt-project.org/doc/qt-4.8/qmetatype.html#qRegisterMetaType

所以,你可以試試這個:

typedef QVector<double> MyArray; 
// ... 
qRegisterMetaType<MyArray>("MyArray"); 
// ... 
connect(this, SIGNAL(signal(MyArray)),this, SLOT(slot(MyArray)),Qt::QueuedConnection); 
+0

我應該把這個 - 在'工人'線程類,爲什麼? 我應該把它放在信號/插槽部分@Chernobyl – fiz 2014-09-27 11:41:49

+0

另外我的信號和插槽之前是如何與QVectors一起工作的,而不是這個額外的層? – fiz 2014-09-27 11:44:36