首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QModelIndex到QJSValue

QModelIndex到QJSValue
EN

Stack Overflow用户
提问于 2017-01-11 13:18:11
回答 1查看 350关注 0票数 0

我尝试重新实现filterAcceptsRow(int source_row, const QModelIndex &source_parent)-method of a QSortFilterProxyModel

在这里,我想调用一个可调用的QJSValue,并将这两个参数传递给它。为此,我需要将它们放在QJSValueList中,这对于整数来说很容易。

但是,我无法找到对QModelIndex进行同样处理的方法。

  • JSValue没有接受QModelIndex的构造函数。
  • QJSEngine::createQObject拿QObject,我没有。

我有成功的机会吗?

编辑:我现在尝试了什么,

代码语言:javascript
复制
bool FilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
    if (m_filter.isCallable()) {  // check whether a JS-Function is set
        QJSValueList l;
        QJSValue f = QJSValue(m_filter);
        l << QJSValue(source_row);

        // **** ADD MORE USEFULL STUFF HERE ****
        // This is working now - thanks to your help. But useless in QML
        QJSEngine *engine = m_filter.engine();
        l << engine->toScriptValue(source_parent);// <-- Value is of no use in QML. Can't do anything with it. And for ListModels as source utterly useless

// V----- To add this would make more sense, but the app crashes. Don't call index()!!!     
//        l << engine->toScriptValue(index(source_row, 0, source_parent));
        return f.call(l).toBool();
    }
    // If no JS-Function is set, fall back to the original method
    return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}

请原谅我任何琐碎的错误。自从我上次使用(并开始学习) C++以来已经有5年了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 20:03:56

根据您的描述,我不太清楚您在做什么,但是假设您有一个QModelIndex (在C++中),并且出于某种原因想要一个QJSValue,那么我认为QJSEngine::toScriptValue确实是您想要的。这可能应该从QJSValue文档中链接,我将在以后的发行版中尝试修复它。

我自己从来没有这样做过,但是像这样的事情应该能起作用:

代码语言:javascript
复制
QJSEngine *e; /* I assume you've got this already somewhere .. */
QModelIndex m = something->index(...); /* and you have a model index */
QJSValue val = e->toScriptValue(m);
// go ahead and use val!

如果您想走相反的方向,即从一个QModelIndex解封一个QJSValue:

代码语言:javascript
复制
QJSValue val = something->prop(); // now to extract it...
QModelIndex m = e->fromScriptValue<QModelIndex>(val);
// go ahead and use m!

QVariantQJSValue都是动态的“框”,可以包含不同类型的数据,因此您不希望加倍使用QJSValue(QVariant(QModelIndex)) (不会编译,只是为了演示存储),因为它不知道如何正确地解压缩它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41592001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档