【发布时间】:2019-09-15 04:55:58
【问题描述】:
我有一个数据模型对象,它带有一个用于处理 Qt 事件的方法。但是,当我尝试将事件处理程序连接到此方法时,会出现编译时错误。问题是connect 模板最终会在第四个参数上执行static_cast<void (QObject::*)(double)>。由于我的数据模型不是从 QObject 继承的,因此此代码会生成错误 C2664:
指向的类型是不相关的;转换需要 reinterpret_cast、C-style cast 或 function-style cast
有没有办法将事件处理程序连接到非 QObject 类型?一个最小的例子:
struct DataModel {
void handle(double) { }
};
DataModel data;
QDoubleSpinBox spinBox;
connect(&spinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
&data, &DataModel::handle);
鉴于所有“连接”方法所做的只是设置事件转发,因此这种类型要求似乎没有必要。我们不能在那里使用任何有效的函数指针是有原因的吗?
【问题讨论】:
标签: c++ qt events event-handling qt5