问:如何使用evaluateJavaScript中返回的QVariant?

时间:2014-03-18 00:15:21

标签: javascript c++ qt

我正在使用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对象的经验)。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

您应该做的第一件事是咨询QVariant documentation。 Qt文档非常全面;好好利用它。

无论如何,QVariantMapQMap<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");