Qt 信号插槽类范围类型
Qt Signal Slots class scope types
给定来自外部 SDK 的两个标头,
class A
{
public:
class B
{
};
public slots:
void onValue(B* b);
};
class C
{
signal:
void value(A::B* b);
};
问题是我如何连接 C -> A 的信号和插槽,因为数据类型在运行时被视为不兼容。
正如您所注意到的,下面的代码报告了运行时错误,报告了signal
和slot
之间的不兼容:
QObject::connect( &c, SIGNAL( value( A::B* ) ), &a, SLOT( onValue( B* ) ) );
错误是:
QObject::连接:不兼容的发送方/接收方参数 C::value(A::B*( --> A::onValue(B*(
这是因为SIGNAL
和SLOT
是宏,调用的兼容性在运行时解析,并且在这种情况下失败,因为它应该像A::B
一样工作,B
是相同的(很可能是因为它显然是一个简单的文本比较(。
但这是一个旧式的连接命令(Qt5 之前(。
使用新的样式连接命令:
QObject::connect( &c, &C::value, &a, &A::onValue );
在编译时和运行时都不会报告任何错误,并且连接将正常工作。
相关文章:
- 如何计算数据类型的范围,例如int
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 将超出范围的整数分配给有符号字符类型
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 将使用/类型定义限制为类范围
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- 为什么基于范围类型的大括号上循环init列表是非法的c++
- 连接到MS SQL的程序类型超出范围
- C++数据类型 s 及其范围
- 类型大小与其值范围之间的关系?
- C++,"由于数据类型范围有限,比较总是正确的"
- C++中最大的数据类型范围
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 如何计算浮点数据类型的范围、最大值、最小值
- 在 c++ 中确定某个值是否在该数据类型的最大范围内
- C++参数类型以接受适用于基于范围的 for 循环的所有序列
- 范围分辨率运算符在类型:: var的情况下返回什么
- Qt 信号插槽类范围类型
- 是否可以根据基于的范围类型调用不同的取消引用运算符重载
- 将变量(数组类型)从函数传递到"main"范围类型:标准::tr1::match_results<标准::字符串::const_iterator>