问题标签 [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.

0 投票
1 回答
4704 浏览

c++ - 如何从槽中找出哪个信号调用了这个槽?

我的意思是,如果我有许多不同的信号连接到同一个插槽。我看到了这个问题,但无法理解答案中的链接。你能给我举个简单的例子吗?

0 投票
2 回答
2586 浏览

c++ - Qt 元对象系统:使用带有名称的字符串发出信号

Qt 信号/槽系统很不错,但看起来它缺少一些真正有用的功能(或者至少我找不到如何使用它)。我有一个有很多信号的类,这个类有一个switch需要根据变量的值发出适当的信号。现在我使用 C 预处理器解决了这个问题:

这看起来不太对劲。我相信有一种更优雅的方式。QMetaObject有一种indexOfSignal方法可以使用带有名称的字符串为我提供 Qt 的信号内部 ID。如果我可以使用此 ID 发出信号,我的代码会变得更加简洁。

我查看了由 生成的信号方法实现moc,看起来唯一不同的是一个信号与另一个信号是一个数字:

其中<signal_id>是每个信号唯一的整数。

所以,问题是,我该怎么做emit(int signalIdx)?或者至少有机会打电话QMetaObject::activate,因为它看起来隐藏在私人标题中?

0 投票
1 回答
452 浏览

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)

0 投票
1 回答
727 浏览

qt - 新的 QObject::connect 语法不起作用

我正在使用新语法QObject::connect将信号连接到插槽:

但我收到了这个奇怪的错误,我不知道为什么:

奇怪的是,如果我使用旧语法,一切正常:

此外,此连接工作正常:

也是void onError(QNetworkReply::NetworkError);一个private slot

我究竟做错了什么?

编辑

请注意,这不是应该工作的代码。我写这个类只是为了隔离问题;代码应该编译。

myclass.h

myclass.cpp

我得到的唯一错误是这里:

0 投票
3 回答
756 浏览

c++ - 没有插槽,但使用 Qt 和 C++ 时出现 QMetaObject::connectSlotsByName 错误

我正在用 C++ 和 Qt Creator 编程,我的代码运行良好。尽管如此,我还是遇到了编译代码时收到警告的问题。

曾经有一个名为on_but_PrintTab_clicked()的插槽,但它不再存在。我怎样才能摆脱这个警告?

0 投票
0 回答
1222 浏览

c++ - 如何使用 Q_ARG 传递指向 QMetaObject::newInstance() 的指针

我正在尝试使用 QMetaObject::newInstance 方法调用对象的构造函数。下面我有两个要使用的构造函数示例,一个带有指针,一个带有基本类型:

我可以使用以下方法调用构造函数 B:

但调用构造函数 A 不起作用:

我尝试了一些变体,包括 Q_ARG(B*, b_ptr)。此外,B 类也继承自 QObject。

0 投票
2 回答
1768 浏览

c++ - 如何序列化一个大而复杂的对象?

我有一个User带有 40 多个私有变量的“”类,包括复杂的对象,如私钥/公钥(QCA 库)、自定义 QObjects 等。这个想法是该类有一个名为的函数sign(),它可以加密、签名、序列化自身并返回一个QByteArray可以然后存储在 SQLite blob 中。

序列化复杂对象的最佳方法是什么?QMetaObject用?迭代属性 将其转换为 protobuf 对象?

可以将其转换为 char 数组吗?

0 投票
0 回答
280 浏览

c++ - QMetaObject::invokeMethod 返回true但不执行solt

我正在尝试使用以下方法在另一个线程中运行公共插槽invokeMethod

现在,invokeMethod返回 true 并且不报告错误消息,但onEventRequest永远不会调用 slot。onEventRequest我添加了一个永远不会触发的断点。

m_manager在主线程中创建,这个类继承QObject并使用Q_OBJECTinvokeMethod在另一个创建的线程中执行QThread::run()

我将不胜感激任何帮助,或者如何检查为什么没有调用该方法。

0 投票
1 回答
27930 浏览

c++ - 是否可以断开 QObject 的所有连接而不删除它

我有一个 QObject A,它连接到另一个 QObject B。现在我希望 A 连接到 C,第三个 QObject 并与 B 完全断开连接。

十分简单!问题是我有很多 A,每个都有自己的一组信号和插槽(B/C 更通用)。到目前为止,我一直在为每种不同的类类型手动创建连接和断开连接方法。这些方法基本上是彼此交换connectfordisconnect调用的副本,违背了不要重复自己)。

所以我的问题是:以下功能是否可能?

我在QMetaObjectQObjectSignals and Slots文档中四处寻找,但没有运气(尽管这通常不能保证......)。

0 投票
1 回答
129 浏览

qt - 使用 QMetaObject::invokeMethod 和多个候选者消除歧义

我想知道是否可以使用 调用方法QMetaObject::invokeMethod,如果该方法具有这样的可选参数

我努力了 :

但是输出告诉我(当然)有多个候选人

是否可以消除歧义invokeMethod,所以我肯定会打电话myMethod(int,bool)

编辑:我发现这是自定义类的名称空间问题,而不是“nt andbool”。我写了一个快速而肮脏的解决方案。

但这似乎非常非常肮脏。任何人都有一个很好的解决方案来处理这个问题?