问题标签 [qmetaobject]
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.
c++ - 无法将 QMetaMethod 与 lambda 连接
我有一个基类 Binded 设置,用于将其中的属性与给定的小部件绑定,例如示例中的 LineEdit。我坚持连接信号和插槽。正如我所看到的,它与如何使用 QMetaMethod 和 QObject::connect的答案中提供的代码相同 ^
在 cpp 中:
我在同一个函数中有一些经典的连接(没有 qmetamethod),但我得到的是
C:\Projects\some\settings.cpp:279: error: no matching function for call to 'BindedSettings::connect(BindedSettings*, QMetaMethod&, BindedSettings*, BindedSettings::bindWtToProp(QLineEdit*, const char*)::) ' 连接(这个,信号,这个,={});
python - PySide2 在访问 QObject::property() 时崩溃
所以我不确定这是一个错误还是什么,但我花了很长时间来解决这个问题,但无法解决。访问调用QObject::property()
函数时会出现问题。这是一个最小的可重现示例:
该程序总是崩溃并显示以下输出:
qt - Set property value of QObject by index, not name
In my publisher-subscriber class the Qt components subscribe by their property names. The publisher maps the pairs <QObject*,PropertyName (as QString)>
to the names of the publishable variables.
On variable change, the list of subscribed QObjects are called using setProperty:
I'd like to optimize the conversion from QString to char*. Also I assume, internally in setProperty the property setter function is found by going through the list of const* and string compare.
QMetaObject provides the method:
which I could use during the subscription to get the index and later on the value change use only Index instead of the string-name.
But how can I invoke the property setter by the index? Is it possible at all?
qt - 无法解析 Qt 的 QMetaObject::invokeMethod: No such method 错误
我正在尝试开发一个通用函数来确定两个 QObjects 是否相等。为了使这成为可能,被比较的函数必须有一个“equals”方法,该方法比较每个函数中的各种函数值,如果它们都相等则返回true。此外,这个“相等”方法必须用 Q_INVOKABLE 声明。
但是,当我尝试为 'equals' 方法调用 invokeMethod 时,它会失败并显示错误“QMetaObject::invokeMethod: No such method F1::equals(QObject*)(QObject*)”。
这是我的测试项目和文件:
项目文件:
断言1.h
f1.h
主文件
运行测试会产生以下输出:
如何让 invokeMethod 工作?
c++ - 使用 std::move 将 std::unique_ptr 作为 qt 信号参数传递
我在 Qt 工作,我没有提到它,因为我认为这只是 C++ 问题。
我用共享指针解决了这个问题,所以不要给我解决方案。但这是理解的问题,我想了解为什么它不起作用。
我正在尝试以下操作:
测试.h:
测试.cpp:
Response
班级:
我知道std::unique_ptr
不能复制,我std::move
在这里使用。但尽管如此,我得到一个错误:
在下面的代码片段中moc_test.cpp
,它是 Qt 元对象系统的产物:
花了很多时间,但我无法弄清楚为什么会发生这个错误,并且在互联网上没有找到任何有用的东西。
c++ - 如何检查它是否是由 QMetaType::create() 创建的有效 QObject 指针
我需要转换QVariant
为其他用户自定义类。
所有类都必须派生自QObject
.
我可以在编译时检查目标类型,因为它是模板,但源是QVariant
这样,无法检查。
我的方法:
称之为:
from
永远不会为空,但如果userType
不是QObject
基类,from
则不是有效QObject
指针,并且调用在调用时崩溃:
我不能dynamic_cast
从void*
QMetaType::create()
我试过qobject_cast
了,from
但如果它无效,它不会失败
我如何知道是否是指向派生类QObject* from
的有效指针?QObject
qt - Qt - 编译时检查 qRegisterMetaType() 被称为
<br>
问题:有没有办法在编译时检查是否qRegisterMetaType<T>()
调用了自定义类型T
?
自定义类型T
需要在 Qt 元类型系统中注册才能用于例如排队连接。
如果建立了这样的连接并触发了信号,则会显示运行时警告:
这很难跟踪,所以我宁愿在编译时检查它。这有可能吗?
(我知道如果可能的话,它可能已经是 Qt 框架本身的一部分,但也许......?)
注意:我知道我可以检查一个类型是否被声明为元类型(检查类型是否被声明为元类型系统(对于 SFINAE)),但这并不能解决我的问题。
代码示例将是:
c++ - Qt 直接调用 QThread 事件循环的方法
在我的应用程序中,我使用了一个生成自己的线程的非 Qt 类。此对象在设备上侦听并在设备每次收到数据包时调用回调。
在我的设备类(从 QObject 派生)中,我有一个静态函数,它接收回调,然后应该调用实际对象的成员函数。
Device 对象有自己的 QThread,因为我正在后台进行大量分析。如果可能的话,主线程不应该参与。问题是维基状态(https://doc.qt.io/qt-5/qmetaobject.html#invokeMethod)
“如果类型是 Qt::QueuedConnection,一旦应用程序进入主事件循环,就会发送一个 QEvent 并调用该成员。”
这听起来像是主线程至少需要处理每个数据包才能将其转发到 Device 对象所在的线程。
难道没有一个选项可以在不使用主线程的情况下调用当前对象所在的 QThread 中的函数吗?
(QThread 肯定有自己的 EventLoop)