之前项目的代码从Qt4迁移到Qt5, 发现以前在Qt4中使用winEvent写的边缘拖动无法通过编译.
查了一下原来是在Qt5中已经移除winEvent, 并使用nativeEvent来代替.
那么在工程中只需要略加修改即可使用, 主要改两个地方:
1. 加入nativeEvent函数:
bool MainDialog::nativeEvent(const QByteArray &eventType, void *message, long *result) { Q_UNUSED(eventType); MSG* msg = reinterpret_cast<MSG*>(message); return winEvent(msg, result); }
2. winEvent中在原来需要返回给父类处理的地方加个判断:
bool MainDialog::winEvent(MSG *message, long *result) { ... if (message->message != WM_NCHITTEST ) { #if QT_VERSION < 0x050000 return QDialog::winEvent(message, result); #else return QDialog::nativeEvent("", message, result); #endif } ... }
这就可以使用了, 并且可以向后兼容.
PS: 其实使用系统API处理边缘事件,这依赖于系统, 并不是最好的方式, 但是无奈自己写的基于鼠标事件判断的有太多问题. 若谁有基于鼠标事件做判断处理边缘事件的还请共享出来, 让大家学习下.
作者:wzg_j 发表于2013-12-9 1:57:39 原文链接
阅读:191 评论:0 查看评论