在 Qt 中绘制一个边线可以拖拽的矩形,可以通过使用 QGraphicsView 和 QGraphicsScene 来实现。QGraphicsView 提供了一个视图窗口,QGraphicsScene 用于管理所有的图形项,比如矩形。我们可以使用 QGraphicsRectItem 来表示矩形,并通过鼠标事件来实现拖拽功能。
以下是一个简单的示例代码,展示如何实现一个可以拖拽边线的矩形:
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QMouseEvent>
#include <QDebug>
class DraggableRectItem : public QGraphicsRectItem {
public:
DraggableRectItem(QRectF rect) : QGraphicsRectItem(rect) {
setFlags(ItemIsMovable | ItemSendsGeometryChanges);
}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
m_dragStartPoint = event->pos();
}
QGraphicsRectItem::mousePressEvent(event);
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {
if (event->buttons() & Qt::LeftButton) {
QPointF newPos = pos() + event->pos() - m_dragStartPoint;
setPos(newPos);
m_dragStartPoint = event->pos();
}
QGraphicsRectItem::mouseMoveEvent(event);
}
private:
QPointF m_dragStartPoint;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建场景
QGraphicsScene scene;
// 创建一个可拖拽的矩形
QRectF rect(0, 0, 100, 100);
DraggableRectItem *rectItem = new DraggableRectItem(rect);
scene.addItem(rectItem);
// 创建视图
QGraphicsView view(&scene);
view.setRenderHint(QPainter::Antialiasing);
view.setSceneRect(0, 0, 400, 300);
view.show();
return app.exec();
}
代码解释
- DraggableRectItem 类:
- 继承自
QGraphicsRectItem。 - 在构造函数中,设置标志
ItemIsMovable使得矩形可以被移动,ItemSendsGeometryChanges使得在矩形的几何变换发生变化时可以接收通知。 - 重写
mousePressEvent和mouseMoveEvent方法,以实现自定义的拖拽行为。
- 继承自
- main 函数:
- 创建
QApplication对象。 - 创建
QGraphicsScene对象来管理图形项。 - 创建一个
DraggableRectItem对象,并将其添加到场景中。 - 创建
QGraphicsView对象来显示场景,并设置视图的大小。 - 调用
show方法显示视图。
- 创建
运行这个程序,你会看到一个可以拖拽的矩形。你可以点击并拖动矩形的任意位置来移动它。
这个示例是一个基本的实现,如果你需要更复杂的拖拽行为(比如只拖拽边线来调整矩形大小),你需要进一步处理鼠标事件,并根据需要调整矩形的尺寸。
1341

被折叠的 条评论
为什么被折叠?



