Qt:如何使用从evaluateJavaScript返回的QVariant
Qt: How to use the returned QVariant from evaluateJavaScript?
我使用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对象的经验)。
谢谢你的建议
您应该做的第一件事是查阅QVariant文档。Qt文档非常全面;好好利用它。
无论如何,QVariantMap
是QMap<QString, QVariant>
的类型定义。因此,您可以使用字符串键(变量名)来提取单个值。
// 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();
正如JKSH建议的那样,如果你想把一个DOM元素以一种有用的形式拉到Qt中来操纵该对象,你不能使用Javascript求值来这样做,因为Javascript元素引用不能转换为QWebElement对象。
要在Qt中获得DOM元素,需要直接使用Qt方法。这段代码应该返回您正在寻找的QWebElementCollection,而不需要Javascript求值:
QWebElementCollection paragraphs = view->page()->mainFrame()->documentElement().findAll("p");
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 如何返回 QVariant 类型数组
- 带有 QVariant 和模板的变量返回类型
- COM对象,并返回QVariant强制转换问题
- 为什么QVariant::type()返回一个QVariant::type,而它应该被解释为QMetaType:: ty
- Qt:如何使用从evaluateJavaScript返回的QVariant