“本想贴图的,但是发现图片连接不能用”
图片为一个很平常见的浏览器,分为蓝色框和红色框
图片中蓝色框为标签、工具、功能部分,红色框为浏览器页面显示部分
实现代码为eventfilter,如下:
#define CURSOR_SP1 7
#define CURSOR_SP2 15
#define TIMEDELAY -500
bool BrowserApplication::eventFilter(QObject *obj,QEvent *event)
{
QPoint pos;
QPoint mPoint;
QPoint mGPoint;
QMouseEvent *mevent;
QKeyEvent *qevent;
static QTime oldTime = QTime::currentTime();
QTime curTime = QTime::currentTime();
int timeMis = curTime.msecsTo(oldTime);
static bool numLockFlag = true;
static QPoint posMis;
// 1 for up, 2 for down, 3 for left, 4 for right
static int keyFlag = 1;
static int flagCount = 0;
int cursorSP = 1;
if((QEvent::KeyRelease == event->type()) || (QEvent::KeyPress == event->type())) {
qevent = static_cast<QKeyEvent *>(event);
if ( qevent->key() == Qt::Key_NumLock && QEvent::KeyPress == event->type() ) {
numLockFlag = !numLockFlag;
return true;
}
switch(qevent->key()) {
case Qt::Key_Up:
if ( !numLockFlag )
break;
if ( keyFlag == 1 && timeMis > TIMEDELAY )
flagCount++;
else
flagCount = 0;
if ( flagCount >= 10 && flagCount < 20 )
cursorSP = CURSOR_SP1;
else if ( flagCount >= 20 )
cursorSP = CURSOR_SP2;
pos = QCursor::pos();
pos.setY(pos.y() - cursorSP);
QCursor::setPos(pos);
oldTime = QTime::currentTime();
keyFlag = 1;
return true;
... ...
case Qt::Key_Enter:
pos = QCursor::pos();
pos.setX(pos.x() - posMis.x());
pos.setY(pos.y() - posMis.y());
printf("$$$Areos: KEY_P&R X = %d, Y = %d \n", pos.x(), pos.y());
QMouseEvent *mEvnPress;
QMouseEvent *mEvnRelease;
mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::postEvent(obj, mEvnPress);
QCoreApplication::postEvent(obj, mEvnRelease);
return true;
default:
printf("$$$jervis:default:%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
break;
}
} else if ((event->type() == QEvent::MouseMove) || (event->type() == QEvent::MouseButtonPress) || (event->type() == QEvent::MouseButtonRelease)) {
mevent = static_cast<QMouseEvent *>(event);
mGPoint = mevent->globalPos();
mPoint = mevent->pos();
printf("###Areos: mouse_M X = %d, Y = %d \n", mPoint.x(), mPoint.y());
printf("###Areos: mouse_M GX = %d, GY = %d \n", mGPoint.x(), mGPoint.y());
if( posMis != (mGPoint - mPoint) )
posMis = mGPoint - mPoint;
}
return false;
}
问题:
现在在红色区域已经可以实现键盘按键enter模拟鼠标点击,但是在蓝色框部分不能实现,问题应该是出在
mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::postEvent(obj, mEvnPress);
这个地方,pos给的是global坐标(对于红色区域使用的时候,已经将局部与全局偏差修正过,),但是对于蓝色区域,通过上面鼠标移动事件,检测发现其相对坐标分为三块:标签栏一块,上面英文功能栏一块,中间地址栏一块
现在我想让蓝色部分也实现能让enter键“点击”
大家帮忙讨论下,看看会是哪里出的问题