问题标签 [qproperty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2495 浏览

qt - 将 Q_PROPERTY 与 QString 的 NOTIFY 项一起使用

我有一个基于小部件的类。它有两个私人QString成员。我希望能够使用信号来通知值何时更改。因此,对于这两个变量,我都有一个 setter 和一个 getter。我也有信号。

  • 问题:它们可以使用相同的信号吗?还是我必须定义两个独立的信号?

然后 - 我想将该信号绑定到同一类中的一个插槽(我知道我可以只调用插槽而不是发出信号 - 但我想使用信号)。

  • 我如何连接它们?我试过:

    /li>

但它不会编译 - 就像invoiceFilterDirectionParta一样QString,而connect期望第一个参数是QObject*

我可以this在连接语句中使用——但就单个信号而言——我猜这两个插槽都会触发?只有选项两个独立的信号,然后thisconnect语句中使用 - 还是我错过了什么?

  • 最后一个问题:我需要一个Q_PROPERTY来完成所有这些工作吗?当我第一次使用它时,我认为它是某种神奇的宏 - 当我使用它时,就像这样:

    /li>

我认为它会自动生成变量、setter、getter 和通知信号。可悲的是 - 那没有发生;)。它只是尖叫着提到的项目都不存在。这就是它的全部吗?真的找不到一个好的用例......

0 投票
2 回答
2222 浏览

qt - 如何覆盖 Q_Property?

考虑这些类:

当访问属性值时,直接调用 A 类方法而不是 B 类方法。

到目前为止,为了解决这个明显的限制,我复制了属性代码并连接了每个类的信号。

这是最好的解决方案吗?

有没有人看到潜在的问题(由于具有相同名称的属性)?

0 投票
1 回答
488 浏览

c++ - 如何构建一个通用方法将不同 Q_PROPERTY 类型的 notifySignal 连接到属性 char * name 的 void slot(QVariant)?

我正在尝试编写一个带有两个参数的方法:Q_PROPERTY名称(char *)和QObject *关联的,允许将 的 notifySignal(如果存在)连接Q_PROPERTY到 avoid slot(QVariant)或动态构建的将调用 a 的插槽void method(QVariant)。信号的签名可以根据参数的类型而变化。

我怎样才能在 Qt 5 中实现这一点?也许这是不可能的,但当我不确定时,我不会停止搜索。

所以我想我有3个解决方案:

  • 从信号名称动态构建信号确切签名的插槽,并使用旧的 Qt 连接方式在其中调用方法(QVariant):

    /li>
  • 使用新的 Qt 5 连接系统:

    /li>
  • 构建可与 QVariant 一起使用的所有插槽签名。

Althougt,我不知道如何动态构建一个为第一个解决方案调用指定方法的插槽;对于第二种解决方案,我不知道如何从QMetaMethodnotifySignal 中检索函数指针;也许最后一个解决方案是最好的方法,并且很容易实现,但它有点极端。

你怎么看待这件事?

0 投票
2 回答
11835 浏览

qt - 如何将 QObject 指针的属性公开给 QML

我正在对我的班级进行非常简短(和部分)的描述,以显示我的问题。基本上我已经设置了两个属性。

在我的 QML 中,如果我访问该price属性,它工作得很好。但是,如果我访问fruit显然返回的属性,Fruit然后尝试使用它的price属性,那是行不通的。这不应该以这种方式工作吗?

第二个返回Fruit它也是一个属性并且它具有price属性但它似乎没有访问该属性?这应该工作吗?

更新

我包括我的源代码。我用 新建了一个演示HardwareComponent,这样更有意义。我试图根据收到的答案使其工作,但没有运气。

HardwareComponentclass 是 和 的基ComputerCPU

主文件

main.qml

这是我所有项目文件的完整源代码。

当我运行它时,我得到这个输出:

启动 C:\Users\User\Documents\My Qt Projects\build-hardware-Desktop_Qt_5_4_0_MSVC2010_OpenGL_32bit-Debug\debug\hardware.exe... QML 调试已启用。仅在安全的环境中使用。qrc:/MainForm.ui.qml:20: ReferenceError: computer is not defined

即使它在第 20 行 (computer.price) 行发出警告,它仍然有效并显示计算机的价格 (=500)。如果更改它computer.cpu.price,则会报告相同的警告,但不再显示价格 - 它似乎不起作用。

问题是由于价格是一种虚拟财产,它有效!但是如果我在计算机组件内的另一个硬件组件上使用此属性,它就不起作用!Mido 发布的代码/答案让我希望有一个解决方案,它看起来非常接近!我希望我能完成这项工作。

0 投票
1 回答
614 浏览

c++ - 如何使用 qt 属性动态显示/隐藏个人定义的属性的子属性

信息:我们正在尝试创建一个属性,其子属性可以根据另一个子属性的值添加/删除。

这方面的一个例子可能是植物对象。这个对象有一个属性,它是一个由植物类型组成的下拉列表,比如说(雏菊、水仙花和捕蝇草)。如果选择了 venus,我希望在下面显示一个名为 avgFlyIntake 的属性,但如果选择了 daffodil,则该属性应该消失。

编辑:本质上,植物是另一个模型的属性,我猜它可以称为 livingThing。该属性以分层方式显示在 2 列表中。如果可能的话,我希望动态隐藏植物属性。



0 投票
1 回答
505 浏览

c++ - Qtilities:属性浏览器的自定义属性类型?

我正在编写一个程序,该程序要求用户在操作给定对象上的数据时非常灵活。我想我会使用某种属性浏览器;QtilitiesObjectDynamicPropertyBrowser引起了我的注意。

但是,我需要能够添加自己的数据类型。该文档不清楚如何执行此操作。

如何允许我自己的数据类型在 Qtilities 的属性浏览器小部件中表示?

另外,更多关于我的需求:

  • 数据类型不是 Qt 的一部分,它们甚至也不是Q_OBJECTs。
  • 不能选择对相关类进行特定于 Qt 的修改。
  • 通过声明相关类Q_DECLARE_METATYPE是可以的。
  • 特别是,我需要表示向量和矩阵类型(以后可能更多)。
0 投票
1 回答
952 浏览

c++ - qt-solutions QtPropertyBrowser:成员访问不完整类型

我正在尝试编译qtpropertybrowser,这是qt-solutions. 我将它作为SUBDIRS项目的一部分subdirs。我通过 Qt Creator 运行qmakebuildlib/buildlib.pro然后运行结果Makefile,并收到来自moc文件的此错误:

完整的日志如下:

qmake调用是:

这是我什至没有写的代码! 我怎样才能解决这个问题,以便我可以编译qtpropertybrowser和使用它?

0 投票
1 回答
1678 浏览

qt - 使用信号或 Q_PROPERTY 更新 QML 对象

我经常从服务器接收数据。该数据主要由数字组成。它们中的每一个都对应于一个需要更新的 QML 对象。

为了从文件中更新对象,Q_PROPERTY最好的做法是什么?signalsQMLC++

0 投票
1 回答
2541 浏览

qt - Q_PROPERTY 错误“staticMetaObject”中的用户类型不是“blah”的成员

我在命名空间中定义了一些数据类型enum

我想使用Q_PROPERTY,这将返回数据类型......

但我得到错误:

看来,如果我想创建自己的类型,并在中提到的函数中使用它们Q_PROPERTY,它们必须在继承QObject和声明Q_OBJECT宏的类中?这不是很多开销吗?

有其他选择吗?

0 投票
2 回答
1230 浏览

c++ - 访问继承自 QObject 的 Object 的类的 Q_Properties

我有以下简化的设置,我试图访问从 QObject 继承的类的继承类上的 Q_Properties。我可以很好地访问基类的属性,但我无法找到或看到(在调试时)我继承的类的属性:

基类:

继承类:

以及来自通用方法的以下片段,以访问它在传递给它的列表中找到的任何对象的属性:

它工作正常,除了我的输出将像“模型:丰田”并且不包括容量。

我能够获取子类属性的唯一方法是向我的基类添加虚拟 get 和 set 方法以及一个额外的 Q_property,这在我不这样做的正常情况下似乎根本不正确并且不可能t 有权访问基类。