• 5321阅读
  • 3回复

QKeyEvent不能用作signal的参数吗 [复制链接]

上一主题 下一主题
离线sloadstar
 

只看楼主 倒序阅读 楼主  发表于: 2014-10-16
我在widget中装了事件过滤
中间需要把按键相关的事件作为信号传递给其他进程或widget处理,但是因为,时间过滤处理函数是传入的是QEvent指针,
担心事件过滤函数返回后这个指针会被释放,所以想通过如下传实例对象的方式来保证event信息不被释放(不知道有没有更好的方法),


bool QWidget::eventFilter( QObject *object, QEvent *event ){
.......
QKeyEvent*  keyevent = static_cast<QKeyEvent*>( event )
emit SigRevKeyEvent(*keyevent)
.......
}
但是我发现用
qRegisterMetaType<QKeyEvent>("QKeyEvent");
注册QKeyEvent时,qt出错

C:\Qt\Qt5.2.0_Mingw\5.2.0\mingw48_32\include\QtCore\qmetatype.h:720: error: no matching function for call to 'QKeyEvent::QKeyEvent()'
         return new T();
不知道是什么原因,各位大侠有什么主意吗

离线roywillow

只看该作者 1楼 发表于: 2014-10-16
你非要传递这个event本身么……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线sloadstar

只看该作者 2楼 发表于: 2014-10-16
回 roywillow 的帖子
roywillow:你非要传递这个event本身么…… (2014-10-16 23:15) 

有其他办法吗?如果传指针我怕eventFilter执行完以后这个指针就会被释放掉,这样的话等事件循环开始分配执行相应的slot的时候,传过去的指针不已经失效了吗
离线roywillow

只看该作者 3楼 发表于: 2014-10-17
回 sloadstar 的帖子
sloadstar:有其他办法吗?如果传指针我怕eventFilter执行完以后这个指针就会被释放掉,这样的话等事件循环开始分配执行相应的slot的时候,传过去的指针不已经失效了吗 (2014-10-16 23:29) 

一个事件又能包括多少信息,一般需要传出去的也就是pos或者key之类的,单独拿出来发射出去不就行了
如果你发现非得这么做的话那肯定是你有什么地方走错了,或者没发现qt已经为你做好了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个