当前位置: 首页 > news >正文

qt 简单实验 一个可以向右侧拖拽缩放的矩形

1.概要

目的是设置一个可以拖拽缩放的矩形,这里仅用右侧的一个边模拟这个过程。就是为了抓住核心,这个便解决了,其他的边也是一样的。而这个更能体现原理。

2.代码

2.1 resizablerectangle.h

#ifndef RESIZABLERECTANGLE_H
#define RESIZABLERECTANGLE_H#include <QWidget>
#include <QMouseEvent>
#include <QPainter>class ResizableRectangle: public QWidget
{Q_OBJECT
public:ResizableRectangle(QWidget *parent = nullptr);
protected:void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);
private:bool resizing; // 是否正在缩放QPoint resizePos; // 缩放起始位置
};#endif // RESIZABLERECTANGLE_H

2.2 resizablerectangle.cpp

#include "resizablerectangle.h"ResizableRectangle::ResizableRectangle(QWidget *parent) : QWidget(parent), resizing(false), resizePos(0, 0) {}void ResizableRectangle::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setBrush(Qt::blue);painter.drawRect(rect()); // 绘制矩形,你可以根据需要设置矩形的样式
}void ResizableRectangle::mousePressEvent(QMouseEvent *event) {if (event->button() == Qt::LeftButton && event->pos().x() > width() - 10) { // 假设在矩形右侧10像素范围内按下右键开始缩放resizing = true;resizePos = event->pos();}
}void ResizableRectangle::mouseMoveEvent(QMouseEvent *event) {if (resizing) {int delta = event->pos().x() - resizePos.x(); // 计算鼠标移动的距离resize(width() + delta, height()); // 调整矩形大小resizePos = event->pos(); // 更新缩放起始位置update(); // 更新显示}
}void ResizableRectangle::mouseReleaseEvent(QMouseEvent *event) {if (event->button() == Qt::LeftButton) {resizing = false;}
}

2.3 widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
protected:void mousePressEvent(QMouseEvent *event);
private:Ui::Widget *ui;QLabel* lb_x;QLabel* lb_y;
};
#endif // WIDGET_H

2.4 widget.cpp

#include "widget.h"
#include "ui_widget.h"
//#include "resizablerectwidget.h"
#include <QPushButton>
//#include "resizablewidget.h"
#include "resizablerectangle.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//QPushButton *button = new QPushButton("My Button", this);// 设置按钮的位置和大小(可选)// 注意:在 QMainWindow 中,你可能需要先设置一个 central widget 或其他容器//button->setGeometry(QRect(10, 10, 100, 30));//ResizableRectWidget* widget = new ResizableRectWidget(this);//widget->setGeometry(100, 100, 200, 100); // 设置初始位置和大小//widget.show();//ResizableWidget* p_rw = new ResizableWidget(this);//p_rw->setGeometry(0, 0, 200, 100); // 设置初始位置和大小ResizableRectangle* p_RR = new ResizableRectangle(this);p_RR->setGeometry(200, 200, 200, 100);//lb_x = new QLabel("x",this);//lb_x->setGeometry(0, 0, 200, 100);//lb_y = new QLabel("y",this);//lb_y->setGeometry(0, 50, 200, 100);
}Widget::~Widget()
{delete ui;
}void Widget::mousePressEvent(QMouseEvent *event) {lb_x->setText(QString::number(event->pos().x()));lb_y->setText(QString::number(event->pos().y()));
}

2.5 main.cpp

#include "widget.h"
//#include "resizablewidget.h"#include <QApplication>
//创建一个可以拖拽并且缩放的矩形
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();//ResizableWidget rw;//rw.show();return a.exec();
}

3.运行结果

 

http://www.lryc.cn/news/384261.html

相关文章:

  • Google Adsense----Wordpress插入谷歌广告
  • 2-17 基于matlab的改进的遗传算法(IGA)对城市交通信号优化分析
  • VOC格式转YOLO格式,xml文件转txt文件简单通用代码
  • STL迭代器的基础应用
  • 【SQL】数据操作语言(DML) - 删除数据:精细管理数据的利刃
  • 异步复制,主库宕机后,数据可能丢失吗?
  • 如何在Spring Boot中优雅处理异常
  • 1.3.数据的表示
  • 【进阶篇-Day4:使用JAVA编写石头迷阵游戏】
  • 探索 LLamaWorker:基于LLamaSharp的.NET本地大模型服务
  • Qt开发 | Qt控件 | QTabWidget基本用法 | QListWidget应用详解 | QScrollArea应用详解
  • 2023年 AI APT可持续攻击的调查研究报告
  • Leetcode 102.目标和
  • LLM AI工具和Delphi名称的起源
  • 打破数据分析壁垒:SPSS复习必备(十一)
  • 【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction
  • 华为DCN技术:M-LAG
  • k8s持久化之emptyDir使用
  • Java露营基地预约小程序预约下单系统源码
  • 七天速通javaSE:第四天 java方法
  • jupyter notebook的markdown语法不起作用
  • Redis 学习笔记(2)
  • 快慢指针:删除有序数组中的重复项
  • 用户登录错误次数太多锁定账号
  • tedsign vue3 web-端框架中封装一个验证码组件 以及对应node 接口逻辑说明
  • 探索Scala并发编程之巅:高效并行处理的艺术
  • AudioLM: 音频生成的革命性模型
  • C++ Vector的模拟实现
  • Kubernetes之Controller详解
  • openlayers性能优化——开启图层预加载、减少空白等待时间