我正在使用Qt 4.8.1和evaluateJavaScript函数来将一些DOM元素放回到Qt应用程序中。我使用的代码是:
QVariant paragraphs = view->page()->mainFrame()->evaluateJavaScript("document.getElementsByTagName(\"p\")");
const char* returnTypeName = paragraphs.typeName();
std::cout << "returnTypeName = " << returnTypeName << std::endl;
我发现:
returnTypeName = QVariantMap
但是,我不知道QVariantMap中的实际返回类型。
我想知道我可以找到返回的QVariantMap中的实际类型吗?我可以将QVariantMap转换为QWebElement / QWebElementCollection吗?或者我如何使用返回的QVariantMap(因为我没有使用QVariant对象的经验)。
感谢您的任何建议。
答案 0 :(得分:2)
您应该做的第一件事是咨询QVariant documentation。 Qt文档非常全面;好好利用它。
无论如何,QVariantMap
是QMap<QString, QVariant>
的typedef。因此,您使用字符串键(变量名称)来提取单个值。
// Convert your result into the underlying map
QVariantMap returnedMap = paragraphs.toMap();
// Get some values
QVariant value1 = returnedMap["key1"];
QVariant value2 = returnedMap["key2"];
// Find out their types
std::cout << "Type 1 = " << value1.typeName() << std::endl;
std::cout << "Type 2 = " << value1.typeName() << std::endl;
// Convert them to their underlying types
// (assuming value1 is a string, value2 is an int)
QString str = value1.toString();
int number = value2.toInt();
答案 1 :(得分:1)
正如JKSH建议的那样,如果你想以一种有用的形式将DOM元素拉入Qt来操作该对象,你就不能使用Javascript评估这样做,因为Javascript元素引用不能转换为QWebElement对象。
要在Qt中获取DOM元素,您需要直接使用Qt方法。此代码应返回您正在查找的QWebElementCollection,而无需进行Javascript评估:
QWebElementCollection paragraphs = view->page()->mainFrame()->documentElement().findAll("p");