Qt c++实现按下左键生成一个矩形跟着鼠标沿x轴移动 松开后小时
时间: 2024-03-28 12:41:52 浏览: 64
好的,以下是实现步骤:
1. 创建一个继承自 QWidget 的自定义控件,在构造函数中初始化一些变量。
2. 重写 paintEvent() 方法,在其中绘制矩形。
3. 重写 mousePressEvent() 方法,在其中记录下鼠标左键按下的位置。
4. 重写 mouseMoveEvent() 方法,在其中计算出鼠标移动的距离,并更新矩形的位置。
5. 重写 mouseReleaseEvent() 方法,在其中清空记录的位置信息,使矩形停止移动。
下面是具体的代码实现:
```
#include <QWidget>
#include <QPainter>
class MyWidget : public QWidget {
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
setFixedSize(400, 300);
m_rect = QRect(0, 0, 50, 50);
m_pressed = false;
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.fillRect(m_rect, Qt::red);
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
m_pressed = true;
m_startPos = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if (m_pressed) {
int deltaX = event->pos().x() - m_startPos.x();
m_rect.moveLeft(m_rect.left() + deltaX);
update();
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
m_pressed = false;
}
}
private:
QRect m_rect;
bool m_pressed;
QPoint m_startPos;
};
```
在主函数中创建 MyWidget 的实例,并将其显示出来即可。
```
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
以上代码实现了按下左键生成一个矩形,并跟着鼠标沿 x 轴移动,松开后停止移动。
阅读全文