问题标签 [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.
qt - 将 Q_PROPERTY 与 QString 的 NOTIFY 项一起使用
我有一个基于小部件的类。它有两个私人QString
成员。我希望能够使用信号来通知值何时更改。因此,对于这两个变量,我都有一个 setter 和一个 getter。我也有信号。
- 问题:它们可以使用相同的信号吗?还是我必须定义两个独立的信号?
然后 - 我想将该信号绑定到同一类中的一个插槽(我知道我可以只调用插槽而不是发出信号 - 但我想使用信号)。
我如何连接它们?我试过:
/li>
但它不会编译 - 就像invoiceFilterDirectionPart
a一样QString
,而connect
期望第一个参数是QObject*
我可以this
在连接语句中使用——但就单个信号而言——我猜这两个插槽都会触发?只有选项两个独立的信号,然后this
在connect
语句中使用 - 还是我错过了什么?
最后一个问题:我需要一个
/li>Q_PROPERTY
来完成所有这些工作吗?当我第一次使用它时,我认为它是某种神奇的宏 - 当我使用它时,就像这样:
我认为它会自动生成变量、setter、getter 和通知信号。可悲的是 - 那没有发生;)。它只是尖叫着提到的项目都不存在。这就是它的全部吗?真的找不到一个好的用例......
qt - 如何覆盖 Q_Property?
考虑这些类:
当访问属性值时,直接调用 A 类方法而不是 B 类方法。
到目前为止,为了解决这个明显的限制,我复制了属性代码并连接了每个类的信号。
这是最好的解决方案吗?
有没有人看到潜在的问题(由于具有相同名称的属性)?
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,我不知道如何动态构建一个为第一个解决方案调用指定方法的插槽;对于第二种解决方案,我不知道如何从QMetaMethod
notifySignal 中检索函数指针;也许最后一个解决方案是最好的方法,并且很容易实现,但它有点极端。
你怎么看待这件事?
qt - 如何将 QObject 指针的属性公开给 QML
我正在对我的班级进行非常简短(和部分)的描述,以显示我的问题。基本上我已经设置了两个属性。
在我的 QML 中,如果我访问该price
属性,它工作得很好。但是,如果我访问fruit
显然返回的属性,Fruit
然后尝试使用它的price
属性,那是行不通的。这不应该以这种方式工作吗?
第二个返回Fruit
它也是一个属性并且它具有price
属性但它似乎没有访问该属性?这应该工作吗?
更新
我包括我的源代码。我用 新建了一个演示HardwareComponent
,这样更有意义。我试图根据收到的答案使其工作,但没有运气。
HardwareComponent
class 是 和 的基Computer
类CPU
。
主文件
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 发布的代码/答案让我希望有一个解决方案,它看起来非常接近!我希望我能完成这项工作。
c++ - 如何使用 qt 属性动态显示/隐藏个人定义的属性的子属性
信息:我们正在尝试创建一个属性,其子属性可以根据另一个子属性的值添加/删除。
这方面的一个例子可能是植物对象。这个对象有一个属性,它是一个由植物类型组成的下拉列表,比如说(雏菊、水仙花和捕蝇草)。如果选择了 venus,我希望在下面显示一个名为 avgFlyIntake 的属性,但如果选择了 daffodil,则该属性应该消失。
编辑:本质上,植物是另一个模型的属性,我猜它可以称为 livingThing。该属性以分层方式显示在 2 列表中。如果可能的话,我希望动态隐藏植物属性。
c++ - Qtilities:属性浏览器的自定义属性类型?
我正在编写一个程序,该程序要求用户在操作给定对象上的数据时非常灵活。我想我会使用某种属性浏览器;QtilitiesObjectDynamicPropertyBrowser
引起了我的注意。
但是,我需要能够添加自己的数据类型。该文档不清楚如何执行此操作。
如何允许我自己的数据类型在 Qtilities 的属性浏览器小部件中表示?
另外,更多关于我的需求:
- 数据类型不是 Qt 的一部分,它们甚至也不是
Q_OBJECT
s。 - 不能选择对相关类进行特定于 Qt 的修改。
- 通过声明相关类
Q_DECLARE_METATYPE
是可以的。 - 特别是,我需要表示向量和矩阵类型(以后可能更多)。
c++ - qt-solutions QtPropertyBrowser:成员访问不完整类型
我正在尝试编译qtpropertybrowser
,这是qt-solutions
. 我将它作为SUBDIRS
项目的一部分subdirs
。我通过 Qt Creator 运行qmake
,buildlib/buildlib.pro
然后运行结果Makefile
,并收到来自moc
文件的此错误:
完整的日志如下:
qmake
调用是:
这是我什至没有写的代码! 我怎样才能解决这个问题,以便我可以编译qtpropertybrowser
和使用它?
qt - 使用信号或 Q_PROPERTY 更新 QML 对象
我经常从服务器接收数据。该数据主要由数字组成。它们中的每一个都对应于一个需要更新的 QML 对象。
为了从文件中更新对象,Q_PROPERTY
最好的做法是什么?signals
QML
C++
qt - Q_PROPERTY 错误“staticMetaObject”中的用户类型不是“blah”的成员
我在命名空间中定义了一些数据类型enum
。
我想使用Q_PROPERTY
,这将返回数据类型......
但我得到错误:
看来,如果我想创建自己的类型,并在中提到的函数中使用它们Q_PROPERTY
,它们必须在继承QObject
和声明Q_OBJECT
宏的类中?这不是很多开销吗?
有其他选择吗?
c++ - 访问继承自 QObject 的 Object 的类的 Q_Properties
我有以下简化的设置,我试图访问从 QObject 继承的类的继承类上的 Q_Properties。我可以很好地访问基类的属性,但我无法找到或看到(在调试时)我继承的类的属性:
基类:
继承类:
以及来自通用方法的以下片段,以访问它在传递给它的列表中找到的任何对象的属性:
它工作正常,除了我的输出将像“模型:丰田”并且不包括容量。
我能够获取子类属性的唯一方法是向我的基类添加虚拟 get 和 set 方法以及一个额外的 Q_property,这在我不这样做的正常情况下似乎根本不正确并且不可能t 有权访问基类。