如何将QVariant转换为QDomNode?Qt简易DOM模型开发问题
解决Qt Simple DOM Model中从索引获取QDomNode的问题
嘿,我对Qt这个Simple DOM Model的例子挺熟悉的,咱们直接说解决方案——不用费劲去转QVariant,直接从自定义模型里拿对应的QDomNode才是正确的路子!
为什么之前的方法没用?
你提到的那种QVariant转对象的方法,只适用于继承自QObject的类型,而QDomNode并不属于QObject体系,也没有内置的QVariant转换支持,所以肯定行不通。
正确的解决步骤
这个SimpleDomModel是Qt官方的自定义模型示例,它内部本身就是把QDomNode和模型索引绑定在一起的,所以我们可以直接利用模型的内部逻辑来获取节点:
调用模型内置的节点获取方法
查看SimpleDomModel的源码,它应该已经提供了类似nodeFromIndex(const QModelIndex &index)的公共成员函数(或者命名类似domNode的方法),直接调用就能拿到对应的QDomNode:QDomNode targetNode = model_->nodeFromIndex(index);如果模型没有暴露该方法,自己添加一个
要是模型里没把这个方法公开,那咱们可以给SimpleDomModel类加一个公共接口:class SimpleDomModel : public QAbstractItemModel { // ... 保留原有的类成员 public: // 添加这个公共方法 QDomNode nodeFromIndex(const QModelIndex &index) const; };然后实现这个方法——其实模型内部的
index()和parent()方法里,已经用internalPointer()存储了QDomNode的指针,所以实现很简单:QDomNode SimpleDomModel::nodeFromIndex(const QModelIndex &index) const { if (index.isValid()) { // 从索引的内部指针取出QDomNode return *static_cast<QDomNode*>(index.internalPointer()); } // 返回空节点处理无效索引 return QDomNode(); }
这样你就能直接通过索引拿到想要的QDomNode了,比折腾QVariant转换靠谱得多~
内容的提问来源于stack exchange,提问作者Count Zero
相关产品推荐
相关产品推荐

