qt用鼠标实时绘制矩形,并且能用鼠标改变矩形大小和方向
时间: 2024-02-18 11:00:47 浏览: 207
可以使用Qt的绘图类和鼠标事件来实现实时绘制矩形并改变矩形大小和方向。以下是一个简单的示例代码:
```cpp
#include <QtWidgets>
class Rectangle : public QWidget {
public:
Rectangle(QWidget *parent = nullptr) : QWidget(parent) {
setMouseTracking(true);
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
painter.drawRect(rectangle);
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
startPoint = event->pos();
rectangle = QRect(startPoint, QSize());
update();
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if (event->buttons() & Qt::LeftButton) {
rectangle = QRect(startPoint, event->pos()).normalized();
update();
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
endPoint = event->pos();
rectangle = QRect(startPoint, endPoint).normalized();
update();
}
}
void resizeEvent(QResizeEvent *event) override {
QWidget::resizeEvent(event);
rectangle.setWidth(width() - 20);
rectangle.setHeight(height() - 20);
rectangle.moveTo(10, 10);
update();
}
void keyPressEvent(QKeyEvent *event) override {
if (event->key() == Qt::Key_Left) {
rectangle.translate(-10, 0);
update();
} else if (event->key() == Qt::Key_Right) {
rectangle.translate(10, 0);
update();
} else if (event->key() == Qt::Key_Up) {
rectangle.translate(0, -10);
update();
} else if (event->key() == Qt::Key_Down) {
rectangle.translate(0, 10);
update();
}
}
private:
QPoint startPoint;
QPoint endPoint;
QRect rectangle;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Rectangle rect;
rect.resize(400, 400);
rect.show();
return app.exec();
}
```
在这个示例中,我们定义了一个`Rectangle`类,继承自`QWidget`,并重载了`paintEvent`、`mousePressEvent`、`mouseMoveEvent`、`mouseReleaseEvent`、`resizeEvent`和`keyPressEvent`等事件函数。在`mousePressEvent`、`mouseMoveEvent`和`mouseReleaseEvent`事件函数中,我们记录下鼠标按下、移动和释放的位置,并根据这些位置计算出矩形的大小和位置。在`resizeEvent`事件函数中,我们根据窗口大小改变矩形的大小和位置,以保证矩形始终位于窗口中心。在`keyPressEvent`事件函数中,我们根据按下的方向键改变矩形的位置。
这段代码可以实现实时绘制矩形并改变矩形大小和方向。你可以根据需要进行修改和扩展。
阅读全文