gpt4 book ai didi

c++ - 如果参数不是来自末尾,文档在哪里说明您不能从 QT 信号槽连接中删除参数?

转载 作者:行者123 更新时间:2023-11-30 02:24:39 27 4
gpt4 key购买 nike

QT 4.8 documentation它指出:

The signals and slots mechanism is type safe: The signature of a signal must match the signature of the receiving slot. (In fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.) Since the signatures are compatible, the compiler can help us detect type mismatches.

但是代码如下:

QObject::connect(&source, SIGNAL(MySignal(QByteArray,QString,bool), &sink, SLOT(MySlot(QByteArray,bool));

给出“不兼容的发送方/接收方参数”错误。

为什么会发生这种情况?在哪里记录了您必须从末尾删除参数?我知道使用隐式转换可能会有麻烦,但我认为 QT 本质上是使用元数据工作的,元数据应该能够像上面那样连接信号/槽。

最佳答案

[...] it can ignore extra arguments. [...]

除了显而易见的阅读方式外,别无他法。
暂时承认这在技术上是可行的(相信我,这将是一场噩梦)并考虑以下声明:

QObject::connect(
&source,
SIGNAL(MySignal(QString,QString,QString),
&sink,
SLOT(MySlot(QString,QString)
);

到目前为止,还不错。如果 Qt 像您描述的那样工作,那么要忽略的 QString 是什么?
您是否应该引入一组规则和异常(exception)来处理这些情况,以便它迅速将信号槽工具引向 hell ?


也就是说,自 C++11 以来,我们将 lambda 表达式作为语言的一部分。 Qt5 对它们表示欢迎,并定义了一组全新的 connect 定义,您可以使用它们来做您想做的事。用手。当您真正需要它并且您知道自己在做什么时。这样框架就不会在发出事件时试图猜测您的要求。

关于c++ - 如果参数不是来自末尾,文档在哪里说明您不能从 QT 信号槽连接中删除参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com