bool QCefView::sendEVentNotifyMessage(int frameId, const QString& name, const QCefEvent& event) { CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create( TRIGGEREVENT_NOTIFY_MESSAGE); CefRefPtr<CefListValue> arguments = msg->GetArgumentList(); int idx = 0; arguments->SetInt(idx++, frameId); CefString eventName = name.toStdString(); arguments->SetString(idx++, eventName); CefRefPtr<CefDictionaryValue> dict = CefDictionaryValue::Create(); CefString cefStr; cefStr.FromWString(event.objectName().toStdWString()); dict->SetString("name", cefStr); QList<QByteArray> keys = event.dynamicPropertyNames(); for (QByteArray key : keys) { QVariant value = event.property(key.data()); if (value.type() == QMetaType::Bool) { dict->SetBool(key.data(), value.toBool()); } else if (value.type() == QMetaType::Int || value.type() == QMetaType::UInt) { dict->SetInt(key.data(), value.toInt()); } else if (value.type() == QMetaType::Double) { dict->SetDouble(key.data(), value.toDouble()); } else if (value.type() == QMetaType::QString) { cefStr.FromWString(value.toString().toStdWString()); dict->SetString(key.data(), cefStr); } else { __noop(_T("QCefView"), _T("Unknow Type!")); } } arguments->SetDictionary(idx++, dict); return cefWindow_->cefViewHandler()->TriggerEvent(msg); }