标题:要实现在整个屏幕中获取鼠标所在的位置和颜色值,该用怎样的解决思路?
作者:纵刀少年
日期:2013-04-04 23:12
内容:
大概就是像这个软件这个,尝试过从QWidget::mouseMoveEvent入手,但好像只能在窗体内移动才会触发。
尝试一下的思路,但不太行。
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
int x=event->globalX();
int y=event->globalY();
ui->locationLabel->setText(QString::number(x)+','+QString::number(y));
this->screenPixmap= QPixmap::grabWindow(QApplication::desktop()->winId(),x,y,1,1); //这能获得鼠标当前位置的像素值吗?
ui->label_2->setPixmap(this->screenPixmap);
QColor color=QColor(screenPixmap.toImage().pixel(QPoint(x,y)));
ui->rgbLabel->setText('('+QString::number(color.red())+','+QString::number(color.green())+','+QString::number(color.blue())+')');
}
反应比较迟钝。
当 this->screenPixmap= QPixmap::grabWindow(QApplication::desktop()->winId(),x,y,1,1);
会警告超出范围:QImage::pixel: coordinate (1145,150) out of range。
而this->screenPixmap= QPixmap::grabWindow(QApplication::desktop()->winId(),x,y,-1,-1);//默认宽度和高度
则不会提示,为什么会这样?
#1 [roywillow 04-05 10:06]
我之前实现过类似的功能,好像贴在某个区里了
确实使用鼠标事件只能实现在窗口范围内实现捕捉,这个qt应该是无法改变的
我当时使用了QTimer,配合QCursor的某个静态函数,定期获得鼠标在整个屏幕的位置
然后截图,并且也是只截取鼠标位置下的一个像素
你的那个超出范围的原因应该是pixel()访问的问题,因为你截取的图片只是鼠标下的一个像素,所以这个像素在图片中的坐标是(0,0),不是(x,y)
#2 回 1楼(roywillow) 的帖子 [纵刀少年 04-05 10:45]
哦哦!明白!
THANKS
#3 [xsjqqq123 04-05 11:40]
楼主,做好后能否借来研究下?
#4 回 3楼(xsjqqq123) 的帖子 [纵刀少年 04-05 14:11]
只是研究一下方法,不是一个任务。不一定会做出来个像样的项目来~
另,上面截图的软件是按键精灵中的一个小程序。
#5 [zs_test 03-11 15:41]