Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

Qt5下使用windows api处理无标题栏的边缘拖动

$
0
0

之前项目的代码从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 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>