2011-04-10 120 views
1

我想在鼠标移动时改变椭圆的颜色。 但是我还没有从Qt Creator的参考和自动完成中找到任何东西。Qt Creator,C++,鼠标悬停功能

你们知道该怎么做吗?

我的一些代码:

void DrawingWidget::paintEvent(QPaintEvent *event) { 
    QPainter painter(this); 
    painter.fillRect(event->rect(), Qt::white); 

    for(int i = 0; i < pointList.size(); i++) { 
     if (pointList[i].x() >= 0 && pointList[i].y() >= 0) 
      painter.drawEllipse(pointList[i], 10, 10); 
    } 
    painter.drawLines(lineList); 
    m_mainWindow->updateCount(); 
} 

按下鼠标事件处理程序:

void DrawingWidget::mousePressEvent(QMouseEvent *event) { 
    if (event->button() == Qt::LeftButton 
     && event->buttons() == Qt::LeftButton) { 
     // DO STUFFF 
    } 
} 

鼠标移动事件处理程序:

void DrawingWidget::mouseMoveEvent(QMouseEvent *event) { 
    if (m_mainWindow->getSelectedTool() == MainWindow::moveVertexTool) { 
     m_x = event->x(); 
     m_y = event->y(); 
     if (isPointNear(m_x, m_y)) { 
      //STUFF 
     } 
      update(); 
     } 
    } 
} 

现在我只需要一个鼠标OVER事件(处理)。

+0

请发布您的代码的简短片段。在这一点上,我们仍然知道比你的自动完成还要少... – 2011-04-10 20:51:12

+0

另外。这是一个QWidget或QGraphicsItem? – 2011-04-10 20:53:29

+0

@Greg Hewgill,@Stephan Chu:我在主要帖子中添加了片段。 – Jaanus 2011-04-10 21:00:55

回答

1

使用QWidget::underMouse()检查小部件是否在鼠标光标下。

例如:

void IconButton::paintEvent(QPaintEvent *) 
{ 
    QPainter painter(this); 

    // Note isDown should really use the active state but in most styles 
    // this has no proper feedback 
    QIcon::Mode mode = QIcon::Disabled; 
    if (isEnabled()) { 
     if (isDown()) 
      mode = QIcon::Selected; 
     else 
      mode = underMouse() ? QIcon::Active : QIcon::Normal; 
    } 
    QPixmap pixmap = icon().pixmap(iconSize(), mode); 

    QRect pixmapRect = QRect(0, 0, pixmap.width(), pixmap.height()); 
    pixmapRect.moveCenter(rect().center()); 

    if (m_autoHide) 
     painter.setOpacity(m_iconOpacity); 

    painter.drawPixmap(pixmapRect, pixmap); 
} 

这个值不是在拖放操作正确更新。