0

使用 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;
}
4

1 回答 1

0

因此,经过更多研究,sqlmodelquery 连接必须在其构造函数中发生,因为它在其 QML 页面加载之前尚未激活。

于 2020-04-28T18:17:08.897 回答