bool ColorPicker::eventFilter(QObject *watched, QEvent *event)
{
auto &d = *m_priv;
if (event->type() == QEvent::Enter&&d.GettingColor == false)
{
setCursor(Qt::PointingHandCursor);
}
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = (QMouseEvent *)event;
if (mouseEvent->button() == Qt::LeftButton)
{
d.GettingColor = true;
setCursor(Qt::CrossCursor);
return true;
}
}
else if (d.GettingColor == true && event->type() == QEvent::MouseMove)//实时颜色变化
{
QMouseEvent *mouseEvent = (QMouseEvent *)event;
if (mouseEvent->button() != Qt::LeftButton && (mouseEvent->buttons() & Qt::LeftButton))
{
QPoint mouse_local_pos = QCursor::pos();
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap pixmap = screen->grabWindow(0, mouse_local_pos.x(), mouse_local_pos.y(), 1, 1);
d.m_color = pixmap.toImage().pixel(0, 0);
//emit sendColorPickData_ing(d.m_color);
QString a = QString("background-color:rgb(%1,%2,%3)").arg(d.m_color.red()).arg(
d.m_color.green()).arg(d.m_color.blue());
setStyleSheet(a);
return true;
}
}
else if (d.GettingColor == true && event->type() == QEvent::MouseButtonRelease)//最终选取
{
d.GettingColor = false;
QPoint mouse_local_pos = QCursor::pos();
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap pixmap = screen->grabWindow(0, mouse_local_pos.x(), mouse_local_pos.y(), 1, 1);
d.m_color = pixmap.toImage().pixel(0, 0);
emit sendColorPickData_end(d.m_color);
setCursor(Qt::ArrowCursor);
QString a = QString("background:transparent;");
setStyleSheet(a);
return true;
}
return QWidget::eventFilter(watched, event);
}