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

news/2024/12/22 15:51:25/

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

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

#include <QApplication>  
#include <QMainWindow>  
#include <QGraphicsView>  
#include <QGraphicsScene>  
#include <QGraphicsRectItem>  
#include <QMouseEvent>  class DraggableRectItem : public QGraphicsRectItem {  
public:  DraggableRectItem(const QRectF &rect, QGraphicsItem *parent = nullptr)  : QGraphicsRectItem(rect, parent),  dragging(false) {}  protected:  void mousePressEvent(QGraphicsSceneMouseEvent *event) override {  if (event->button() == Qt::LeftButton) {  dragging = true;  lastPos = event->pos();  }  QGraphicsRectItem::mousePressEvent(event);  }  void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override {  if (dragging) {  QRectF rect = this->rect();  QPointF diff = event->pos() - lastPos;  rect.translate(diff);  this->setRect(rect);  lastPos = event->pos();  }  QGraphicsRectItem::mouseMoveEvent(event);  }  void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override {  dragging = false;  QGraphicsRectItem::mouseReleaseEvent(event);  }  private:  bool dragging;  QPointF lastPos;  
};  class MainWindow : public QMainWindow {  
public:  MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {  auto *scene = new QGraphicsScene(this);  auto *view = new QGraphicsView(scene, this);  setCentralWidget(view);  auto *rect = new DraggableRectItem(QRectF(10, 10, 200, 100));  scene->addItem(rect);  }  
};  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  MainWindow window;  window.resize(400, 300);  window.show();  return app.exec();  
}

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

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

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


http://www.ppmy.cn/news/1475697.html

相关文章

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息&#xff1a;npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

【Python百日进阶-Web开发-音频】Day702 - librosa安装及模块一览表

文章目录 一、Librosa简介与安装1.1 Librosa是什么1.2 Librosa官网 二、Librosa安装2.1 安装Librosa 三、安装ffmpeg3.1 ffmpeg官网下载3.2 ffmpeg安装3.2.1 解压3.2.2 添加环境变量3.2.3 测试ffmpeg是否安装成功 四、Librosa 库模块一览4.1 库函数结构4.2 Audio processing&am…

cuda缓存示意图

一、定义 cuda 缓存示意图gpu 架构示意图gpu 内存访问示意图 二、实现 cuda 缓存示意图 DRAM: 通常指的是GPU的显存&#xff0c;位于GPU芯片外部&#xff0c;通过某种接口&#xff08;如PCIE&#xff09;与GPU芯片相连。它是GPU访问的主要数据存储区域&#xff0c;用于存储大…

1.31、基于长短记忆网络(LSTM)的发动机剩余寿命预测(matlab)

1、基于长短记忆网络(LSTM)的发动机剩余寿命预测的原理及流程 基于长短期记忆网络(LSTM)的发动机剩余寿命预测是一种常见的机器学习应用&#xff0c;用于分析和预测发动机或其他设备的剩余可用寿命。下面是LSTM用于发动机剩余寿命预测的原理和流程&#xff1a; 数据收集&#…

数据中心巡检机器人助力,河南某数据中心机房智能化辅助项目交付

随着数据中心规模的不断扩大和业务需求的不断增长&#xff0c;确保其高效、安全、稳定地运行变得愈发重要。传统的人力巡检方式存在效率低、误差高、成本大等问题&#xff0c;难以满足现代数据中心的需求。为解决这些挑战&#xff0c;智能巡检机器人应运而生&#xff0c;成为数…

[PaddlePaddle飞桨] PaddleOCR-光学字符识别-小模型部署

PaddleOCR的GitHub项目地址 推荐环境&#xff1a; PaddlePaddle > 2.1.2 Python > 3.7 CUDA > 10.1 CUDNN > 7.6pip下载指令&#xff1a; python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr2.7…

周报(1)<仅供自己学习>

文章目录 一.pytorch学习1.配置GPU2.数据读取问题1&#xff08;已解决问题2&#xff08;已解决 3.卷积的学习 二.NeRF学习1.介绍部分问题1&#xff08;已解决 2.神经辐射场表示问题2&#xff08;已解决问题3&#xff08;已解决问题4&#xff08;已解决问题5&#xff1a;什么是视…

2 Java的基本程序设计结构(基本语法1)

文章目录 前言一、数据类型0 与Python的一些区别1 基本数据类型(1)整型(2)浮点数类型(3)字符(char)类型(4)布尔类型(true、false)(5)代码示例2 引用数据类型二、变量与常量1 变量2 常量(*)3 枚举类型变量(*)4 变量的作用域三、变量和类起名规范1 硬性要求(变量…