当前位置:   article > 正文

qt 创建一个矩形,矩形的边线可以拖拽

qt 创建一个矩形,矩形的边线可以拖拽

在Qt中,要创建一个矩形,其边线可以拖拽,你可以使用QGraphicsViewQGraphicsScene来实现。以下是一个简单的示例,展示如何创建一个矩形,并且它的边线可以被拖拽来改变矩形的大小。

首先,你需要包含必要的Qt头文件,并设置你的Qt项目文件(.pro)以包含QtWidgets模块。

  1. #include <QApplication>
  2. #include <QMainWindow>
  3. #include <QGraphicsView>
  4. #include <QGraphicsScene>
  5. #include <QGraphicsRectItem>
  6. #include <QMouseEvent>
  7. class DraggableRectItem : public QGraphicsRectItem {
  8. public:
  9. DraggableRectItem(const QRectF &rect, QGraphicsItem *parent = nullptr)
  10. : QGraphicsRectItem(rect, parent),
  11. dragging(false) {}
  12. protected:
  13. void mousePressEvent(QGraphicsSceneMouseEvent *event) override {
  14. if (event->button() == Qt::LeftButton) {
  15. dragging = true;
  16. lastPos = event->pos();
  17. }
  18. QGraphicsRectItem::mousePressEvent(event);
  19. }
  20. void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {
  21. if (dragging) {
  22. QRectF rect = this->rect();
  23. QPointF diff = event->pos() - lastPos;
  24. rect.translate(diff);
  25. this->setRect(rect);
  26. lastPos = event->pos();
  27. }
  28. QGraphicsRectItem::mouseMoveEvent(event);
  29. }
  30. void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override {
  31. dragging = false;
  32. QGraphicsRectItem::mouseReleaseEvent(event);
  33. }
  34. private:
  35. bool dragging;
  36. QPointF lastPos;
  37. };
  38. class MainWindow : public QMainWindow {
  39. public:
  40. MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
  41. auto *scene = new QGraphicsScene(this);
  42. auto *view = new QGraphicsView(scene, this);
  43. setCentralWidget(view);
  44. auto *rect = new DraggableRectItem(QRectF(10, 10, 200, 100));
  45. scene->addItem(rect);
  46. }
  47. };
  48. int main(int argc, char *argv[]) {
  49. QApplication app(argc, argv);
  50. MainWindow window;
  51. window.resize(400, 300);
  52. window.show();
  53. return app.exec();
  54. }

在这个示例中,DraggableRectItem是一个自定义的QGraphicsRectItem,它重写了mousePressEventmouseMoveEventmouseReleaseEvent方法来处理拖拽操作。当用户按下鼠标左键并移动鼠标时,矩形会随之移动。

MainWindow类创建了一个场景和一个视图,并将一个可拖拽的矩形添加到场景中。

运行这个程序,你将看到一个矩形,你可以通过拖拽它的任何部分来改变它的位置。如果你想要实现边线拖拽来改变大小,你需要进一步处理鼠标事件,并根据鼠标位置相对于矩形边线的位置来调整矩形的大小。这通常涉及到计算鼠标指针与矩形边界的最近点,并相应地调整矩形的宽度或高度。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/838942
推荐阅读
相关标签
  

闽ICP备14008679号