20200306-01 QObject::connect: Cannot queue arguments of type 'QQmlChangeSet'

外國論壇相關回答

一、問題報錯

QObject::connect: Cannot queue arguments of type 'QQmlChangeSet' (Make sure 'QQmlChangeSet' is registered using qRegisterMetaType()

二、問題發生的前因

我在 boost 回調函數中使用了 beginInsertRows 這類更新 Tableview 的信號操作

三、問題

基本上就是因爲在另外一個線程中調用 beginInsertRows 這類並非真正獨立信號的函數,加之使用 boost 回調函數的方式並非是線程安全的,一個線程直接操作另外一個線程本身就是非法的,存在異常的可能性

解決方案,在回調函數中在發送一個信號,到本線程中然後再和 tableview 同一線程內更新 TableView

 

//僞代碼
connect(this, SIGNAL(sx()), this, SLOT(rx());

void xx:onBoostSLot() {
    emit sx();
}

void xx::rx() {
    beginInsertRows(QModelIndex(), x, x);
    endInsertRow();
}

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章