原因:因为我在设计一个鼠标指针限制的范围,用了Qt的方法但是效果不好,所以记录汇总一下
初始化时候调用Winodws API 限制鼠标范围
(根据分辨率进行判断,所以屏幕尺寸发生变化,下面的也会发生变化)
头文件
#include "mainwindow.h"
#include <qapplication>
#include <windows.h>
#include <windef.h>
构造函数
RECT mainWinRect;
mainWinRect.left = 左+ 3;
mainWinRect.right = 左 + 窗口宽;
mainWinRect.top = 上+ 33;
mainWinRect.bottom = 上 + 窗口高;
ClipCursor(&mainWinRect);
左 /上:分别代表坐标(可以通过截图然后鼠标移动就能看到具体坐标)
3和33是余量,稍微把窗口缩小一点碰不到边缘,就一直是鼠标的效果(这个值可以根据自己的需求进行修改,另外由于是固定窗口坐标,所以无法拖拽,也可以避免拖拽后导致限制范围和窗口对不上问题)
如果没有余量的话就是下图的效果,所有有一点会更好看
析构函数-关闭界面的时候释放
ClipCursor(NULL);
但是像ESC之类的按钮需要禁用或者ClipCursor()清掉,不然仍然会被限制在窗口里面
bool Class_A::eventFilter(QObject* obj, QEvent* event) {
Class_A* p_Class = qobject_cast<Class_A*>(obj);
if (p_Class != NULL)
{
switch (event->type()){
case QEvent::KeyPress:
QKeyEvent* p_keyevent = static_cast<QKeyEvent*>(event);
if (p_keyevent->key()==Qt::Key_Escape){
return true;
}
}
}
return QObject::eventFilter(obj, event);
}