使用 QList< QStringList > 参数将信号从主/QML 线程发送到另一个线程。我尝试过的变体:
- Q_DECLARATIVE_METATYPE 进出
- 在信号和槽配置文件中使用 EventExport 与 const EventExport&
- 在 prepareExport() 中发送空的 EventExport,因此发射没有/低数据量
- 检查连接语句(总是返回真)
- 在 prepareExport() 中有 qDebug() 并且信号似乎总是被发出
- 在连接后立即调用发射作为测试(有效!认为你会告诉我主线程或 cryoUtility 对象不存在,但它们确实存在!)
- 尝试使用 () 和 ("EventExport") 的 qRegisterMetaType...有人说使用文本作为 typedef 类型
任何想法都非常感谢!
sqlquery_model.h(不确定我是否需要 Q_DECLARATIVE_METATYPE 但尝试了有无……没有变化)
typedef QList<QStringList> EventExport;
Q_DECLARE_METATYPE(EventExport);
Q_INVOKABLE void prepareExport();
signals:
void updateEventListDataSig(const EventExport&);
sqlquery_model.cpp(这是使用 TableView 模型连接到一个 qml 页面......这个发射似乎不起作用)
void SqlQueryModel::prepareExport() {
if (this->rowCount() > 0) {
EventExport eventsList;
for(int i=0; i<this->rowCount(); ++i) {
QStringList eventInfo;
eventInfo.append(this->record().value(0).toString());
eventInfo.append(this->record().value(1).toString());
eventInfo.append(this->record().value(2).toString());
eventInfo.append(this->record().value(3).toString());
eventInfo.append(this->record().value(4).toString());
eventsList.append(eventInfo);
}
emit updateEventListDataSig(eventsList);
qDebug() << "Emit updatedEventListData" << eventsList.count();
}
}
main.cpp(包括 sqlquery_model.h,需要这个,因为 cryoUtility 是使用 Qt::QueuedConnection 的单独线程)
// Use string if using typedef method
qRegisterMetaType<EventExport>("EventExport");
调解员.h
void updateEventListDataSig(const EventExport&);
mediator.cpp (主要在这里连接,这个测试事件有效)
bool ret = connect(this, SIGNAL(updateEventListDataSig(const EventExport&)), cryoUtility, SLOT(updateEventListData(const EventExport&)), Qt::QueuedConnection);
EventExport ed;
emit updateEventListDataSig(ed);
qDebug() << "Event list CONN: " << ret;
实用程序.h
void updateEventListData(const EventExport&);
utility.cpp(这是插槽,在测试调用时触发一次)
void Utilities::updateEventListData(const EventExport& el) {
qDebug() << "Load event list: ";// << el.count();
//eventList = el;
}