我正在尝试创建一个宏来安装和删除从lambda构造的Qt事件过滤器。在这种情况下,this
已知为QObject
,因此会员destroyed
。 filter
只是一些QObject
派生的事件过滤器。但是我对该行有一个问题:
connect(this, &decltype(this)::destroyed, [filter]()
{
qApp->removeEventFilter(filter);
filter->deleteLater();
});
给出了(MSVC2013)错误:
'::'左边的必须是类,结构或联合
我只是弄错了语法,还是不能这样做?
答案 0 :(得分:3)
Per @ molbdnilo的评论,我没有说明this
是指针的事实。使用type-trait删除指针使其工作:
connect(this, &std::remove_pointer<decltype(this)>::type::destroyed, [filter]()
{
qApp->removeEventFilter(filter);
filter->deleteLater();
});