- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发现自己在尝试从 C++ 中动态实例化自定义 QML 元素时陷入困境。
因此,对问题进行布局:
Node
对象数据结构。QObject
和派生占用大量内存,我必须按需实例化 UI 元素。Node
都有一个 _ui*
成员,每个 UI
都有一个 _node*
成员。<Node
都有一个唯一的_id
,每个UI
都有一个ID
PROPERTY
,从 _node*
交付。 ID 属性是只读的,因为 ID 是在 Node
实例化时设置的,不应修改。_node*
成员为 NULL
,因此 UI
的任何 QML 子元素都试图访问该 ID property 不能,因为 _node*
不是在实例化时设置的,它只能通过 aux 方法设置,但由于 property 实际上是一个只读常量,它在实例化后不再更新当 UI
的 _node*
成员实际设置时。所以基本上,我需要能够在创建时设置指向每个 UI
的相应 Node
的链接,以便 UI 可以访问它
QML 元素,但我无法将其传递给构造函数,并且由于该属性是只读的,因此在 UI
实例化时,当 _node*
UI
成员仍然是NULL
,所以无法访问ID值。
我想到的一个快速而肮脏的解决方案是添加一个 NOTIFY
idChanged()
信号以在设置 _node*
成员时发出后实例化,即使 ID 属性从未真正改变,不能也不应该,并添加对 ID getter 的检查 - 如果 _node*
为 NULL
,则返回一个假的虚拟任意值>,否则从 _node*
成员中获取 ID 值。不用说,这并不优雅,并且增加了一些开销,而且虚拟 ID 值是一个潜在的蠕虫 jar 头,所以欢迎任何关于如何克服 QML 内部不良设计的想法。
最佳答案
我刚刚提出了一个解决方案,而且是一个相当简单的解决方案。考虑到 QtQuick 的设计方式不允许指定构造函数参数,并且考虑到“创建和设置”方法在我的特定使用场景中具有巨大的影响,我决定简单地使该值可用于/在 UI
构造函数,即使没有作为参数传递给那里也是如此。
因此,我只是执行“设置和创建”,而不是“创建和设置”,并使用在创建每个项目之前设置并在项目构造函数中及时设置数据的静态类成员。
class UI : public QQuickItem
{
Q_OBJECT
public:
explicit UI(QQuickItem * parent = 0);
...
private:
Object * object;
static UI * rootUI;
};
Object * UI::protoObject = 0;
UI::UI(QQuickItem * parent) : QQuickItem(parent), object(protoObject) {
if (!protoObject) qDebug() << "ERROR: prototype object is 0, unexpected";
...
}
和实际的对象创建:
UI::setProtoObject(obj);
// create QQmlComponent with obj set being set in the constructor
UI::setProtoObject(0);
此外,另一种适用于不需要尽早在构造函数中设置对象的方法是创建 QQmlComponent
的 beginCreate()
,设置所需的属性,并使用 completeCreate()
关于c++ - 来自 C++ 的 QQuickItem 实例化和设置难题(不允许将任何内容传递给构造函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962750/
我想将 JavaScript 函数移动到 来自输入标签的标签,但它不起作用。 这个有效: 这不是: function FieldOnKeyUp() { this.value=this.
我遇到了这个问题:说给定两个权重1和3,您可以权衡1,2(乘以3-1),3,4(乘以3 + 1)(使用平衡的两面)。现在找到最小的砝码数量,以便可以测量1到1000。 答案是1,3,9,27 ...
这是代码 war 的套路,我似乎无法弄明白。我以前从未使用过 JavaScript。 我知道答案可能很简单,但即使经过许多小时的搜索,我似乎也无法弄清楚他们在寻找什么。我知道 greet 函数中的 n
在完成一项学校作业时,我有一个抽象类 Person、一个扩展 Person 的抽象类 Student 和一个扩展学生的普通类 CollegeStudent。 CollegeStudent 从文件中读取
下面的代码让我很头疼 var somearr = [1, 2, 3]; function operations() { for (var i
我在 3 个文件中有以下代码: Defines.h #ifndef Defines_h extern const unsigned int SIZE; #endif Defines.cpp #incl
我的任务是尝试创建一个从文本文档中删除个人信息的自动化系统。 电子邮件、电话号码相对容易删除。名字不是。这个问题很难,因为文档中有需要保留的名称(例如,引用资料、名人、人物等)。需要从内容中删除作者姓
我卡在这里了... #include #define DBG_LVL(lvl, stmt) \ do{ \ if(lvl>1) printf stmt; \ }while(0) #defi
我正在尝试使用动态编程解决类似桥梁和 torch 的问题。有关此问题的更多信息,请参见维基百科 (http://en.wikipedia.org/wiki/Bridge_and_torch_probl
我有数组 A[0...N]的 double和数组 B[0...N]的 int .每B[i]变化在 [0...P] .我只需要计算数组 C[0...P] : C[j] = SUM( A[i] : B[i
我目前在使用 jQuery 中的scrollTop() 函数时遇到困难。目前,平滑滚动功能正在滚动经过预期部分,然后在功能完成运行后弹回该部分。我在本文末尾添加了一个 jsFiddle,但这是我目前的
PHP代码 $t = strtotime( '2012-09-21T03:00:00+00:00 America/Chicago' ); $t2 = date('c',$t); echo $t2;
我知道使用 .运算符将函数链接在一起,如下所示: isLessThanZero x | x a -> a -> a 还可以看到: subtract :: Num a => a -> (a ->
PHP代码 $t = strtotime( '2012-09-21T03:00:00+00:00 America/Chicago' ); $t2 = date('c',$t); echo $t2;
我创建了两个 jar 文件 my.common.jar,其中包含辅助类和方法(主要是静态方法)。我还创建了一个 jar 文件 test.jar,其中包含一个 main 方法,该方法调用 my.comm
已解决:@Desolator 已让我的代码在下面的评论中完全正常工作 好的,所以我创建了 3 个类,它们都相互链接: 启动画面 > 项目分配 > CompareSignature 我想谈论的类是闪屏类
我正在尝试使用 firestore 的 .where() 功能来检测某个字符串是否在数据库的数组中。我曾尝试通过添加方括号和其他东西来表示数组的一部分来操纵函数的第一个参数,但无济于事。 //in t
我有一个 PHP 系统,允许用户以 1 - 5 的范围对照片进行投票,我想要做的是突出显示两个人给彼此相同的投票/分数的地方。我目前无法弄清楚我的 PHP 函数的 SQL。 数据库看起来像这样 id,
我在使用 SQLAlchemy 处理 Unicode 时遇到了一个奇怪的问题。简而言之,当我将 Python unicode 字符串插入 Unicode 列时我的 MySQL 数据库,我可以毫不费力地
我正在尝试使用 Selenium 自动执行 Google 翻译网络界面(但无需了解 Selenium 即可理解此问题,只需要知道它会找到元素并单击它们即可)。我一直在选择要翻译的语言。 我无法打开下拉
我是一名优秀的程序员,十分优秀!