问题标签 [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++ - Qt 元对象系统:使用带有名称的字符串发出信号
Qt 信号/槽系统很不错,但看起来它缺少一些真正有用的功能(或者至少我找不到如何使用它)。我有一个有很多信号的类,这个类有一个switch
需要根据变量的值发出适当的信号。现在我使用 C 预处理器解决了这个问题:
这看起来不太对劲。我相信有一种更优雅的方式。QMetaObject
有一种indexOfSignal
方法可以使用带有名称的字符串为我提供 Qt 的信号内部 ID。如果我可以使用此 ID 发出信号,我的代码会变得更加简洁。
我查看了由 生成的信号方法实现moc
,看起来唯一不同的是一个信号与另一个信号是一个数字:
其中<signal_id>
是每个信号唯一的整数。
所以,问题是,我该怎么做emit(int signalIdx)
?或者至少有机会打电话QMetaObject::activate
,因为它看起来隐藏在私人标题中?
c++ - QMetaObject invoke on overloaded operators
Has anyone tried to invoke overloaded operator << on a QObject.
For example i have a class
When i try to invoke it with like this i get an error:
ErrorMessage would be: No such method Worker::operator<<(char)(char)
qt - 新的 QObject::connect 语法不起作用
我正在使用新语法QObject::connect
将信号连接到插槽:
但我收到了这个奇怪的错误,我不知道为什么:
奇怪的是,如果我使用旧语法,一切正常:
此外,此连接工作正常:
也是void onError(QNetworkReply::NetworkError);
一个private slot
。
我究竟做错了什么?
编辑:
请注意,这不是应该工作的代码。我写这个类只是为了隔离问题;代码应该编译。
myclass.h:
myclass.cpp:
我得到的唯一错误是这里:
c++ - 没有插槽,但使用 Qt 和 C++ 时出现 QMetaObject::connectSlotsByName 错误
我正在用 C++ 和 Qt Creator 编程,我的代码运行良好。尽管如此,我还是遇到了编译代码时收到警告的问题。
曾经有一个名为on_but_PrintTab_clicked()的插槽,但它不再存在。我怎样才能摆脱这个警告?
c++ - 如何使用 Q_ARG 传递指向 QMetaObject::newInstance() 的指针
我正在尝试使用 QMetaObject::newInstance 方法调用对象的构造函数。下面我有两个要使用的构造函数示例,一个带有指针,一个带有基本类型:
我可以使用以下方法调用构造函数 B:
但调用构造函数 A 不起作用:
我尝试了一些变体,包括 Q_ARG(B*, b_ptr)。此外,B 类也继承自 QObject。
c++ - 如何序列化一个大而复杂的对象?
我有一个User
带有 40 多个私有变量的“”类,包括复杂的对象,如私钥/公钥(QCA 库)、自定义 QObjects 等。这个想法是该类有一个名为的函数sign()
,它可以加密、签名、序列化自身并返回一个QByteArray
可以然后存储在 SQLite blob 中。
序列化复杂对象的最佳方法是什么?QMetaObject
用?迭代属性 将其转换为 protobuf 对象?
可以将其转换为 char 数组吗?
c++ - QMetaObject::invokeMethod 返回true但不执行solt
我正在尝试使用以下方法在另一个线程中运行公共插槽invokeMethod
:
现在,invokeMethod
返回 true 并且不报告错误消息,但onEventRequest
永远不会调用 slot。onEventRequest
我添加了一个永远不会触发的断点。
m_manager
在主线程中创建,这个类继承QObject
并使用Q_OBJECT
宏invokeMethod
在另一个创建的线程中执行QThread::run()
。
我将不胜感激任何帮助,或者如何检查为什么没有调用该方法。
c++ - 是否可以断开 QObject 的所有连接而不删除它
我有一个 QObject A,它连接到另一个 QObject B。现在我希望 A 连接到 C,第三个 QObject 并与 B 完全断开连接。
十分简单!问题是我有很多 A,每个都有自己的一组信号和插槽(B/C 更通用)。到目前为止,我一直在为每种不同的类类型手动创建连接和断开连接方法。这些方法基本上是彼此交换connect
fordisconnect
调用的副本,违背了不要重复自己)。
所以我的问题是:以下功能是否可能?
我在QMetaObject、QObject和Signals and Slots文档中四处寻找,但没有运气(尽管这通常不能保证......)。
qt - 使用 QMetaObject::invokeMethod 和多个候选者消除歧义
我想知道是否可以使用 调用方法QMetaObject::invokeMethod
,如果该方法具有这样的可选参数。
我努力了 :
但是输出告诉我(当然)有多个候选人:
是否可以消除歧义invokeMethod
,所以我肯定会打电话myMethod(int,bool)
?
编辑:我发现这是自定义类的名称空间问题,而不是“nt and
bool”。我写了一个快速而肮脏的解决方案。
但这似乎非常非常肮脏。任何人都有一个很好的解决方案来处理这个问题?