修改上述代码使得长按按钮按钮随鼠标移动
时间: 2024-03-02 20:16:16 浏览: 69
按钮随鼠标点击平滑移动源码
要实现长按按钮随鼠标移动的功能,您可以按照以下步骤进行修改:
1. 在MainWindow.h中添加一个私有成员变量`QPoint lastMousePos`,用于记录上一次鼠标的位置。
```cpp
private:
QPoint lastMousePos;
```
2. 在MainWindow.cpp的构造函数中,为每个按钮连接相应的鼠标按下和鼠标释放事件。
```cpp
for (int i = 0; i < 7; i++) {
QPushButton *button = qobject_cast<QPushButton*>(gridLayout->itemAt(i)->widget());
connect(button, &QPushButton::pressed, this, &MainWindow::onButtonPressed);
connect(button, &QPushButton::released, this, &MainWindow::onButtonReleased);
connect(button, &QPushButton::mouseMoveEvent, this, &MainWindow::onButtonMouseMove);
}
```
3. 实现鼠标按下事件`onButtonPressed()`,在该事件中获取鼠标的当前位置并记录。
```cpp
void MainWindow::onButtonPressed()
{
QPushButton *button = qobject_cast<QPushButton*>(sender());
lastMousePos = button->mapToGlobal(QPoint(0, 0));
}
```
4. 实现鼠标移动事件`onButtonMouseMove()`,在该事件中计算鼠标移动的偏移量,并将按钮的位置更新为新的位置。
```cpp
void MainWindow::onButtonMouseMove(QMouseEvent *event)
{
QPushButton *button = qobject_cast<QPushButton*>(sender());
if (event->buttons() & Qt::LeftButton) {
QPoint currentMousePos = event->globalPos();
int dx = currentMousePos.x() - lastMousePos.x();
int dy = currentMousePos.y() - lastMousePos.y();
int newX = button->x() + dx;
int newY = button->y() + dy;
button->move(newX, newY);
lastMousePos = currentMousePos;
}
}
```
5. 实现鼠标释放事件`onButtonReleased()`,在该事件中清除记录的鼠标位置。
```cpp
void MainWindow::onButtonReleased()
{
lastMousePos = QPoint();
}
```
这样,当您长按按钮并按住鼠标左键移动时,按钮会随着鼠标的移动而移动。希望对您有所帮助!如果还有其他问题,请随时提问。
阅读全文