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.mzph.cn/news/857610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis源码学习:跳表(Skip List)的工作原理详解

什么是跳表 跳表&#xff08;Skip List&#xff09;&#xff0c;首先它是链表&#xff0c;是一种随机化的数据结构&#xff0c;Redis 使用跳表作为有序集合&#xff08;Sorted Set&#xff09;的底层实现之一。跳表能够提供高效的插入、删除、查找操作。本文通过阅读源码来分析…

python对象转字典对象及序列化

python对象转字典 1、为什么要对python对象转换为字典 python字典与json对象结构相似&#xff0c;json数据结构是最常用的数据结构 2、python对象转字典及序列化的核心点在哪 python对象有很多内置属性并不是我们所需要的python字典对象在序列化的时候&#xff0c;时间字段…

grafana 通过自定义API获取数据

一、安装插件 安装infinity插件 二、配置数据源 三、配置图表 1、数据 这边提供一个go的demo package mainimport ("math/rand""net/http""time""github.com/gin-gonic/gin" )func main() {router : gin.Default()rand.Seed(time.…

【SQL】UNION 与 UNION ALL 的区别

在 SQL 中&#xff0c;UNION 和 UNION ALL 都用于将两个或多个结果集合并为一个结果集&#xff0c;但它们在处理重复数据方面有显著区别。以下是它们的详细区别&#xff1a; 1. UNION UNION 操作符用于合并两个或多个 SELECT 语句的结果集&#xff0c;并自动去除结果集中重复…

c# 学习笔记 PropertyChangedEventHandler、 =>、DependencyObject、DataContext

在C#中&#xff0c;PropertyChangedEventHandler 和 PropertyChanged 常常与 INotifyPropertyChanged 接口一起使用&#xff0c;这是实现数据绑定和通知机制的关键部分&#xff0c;尤其在WPF (Windows Presentation Foundation) 或其他支持数据绑定的UI框架中。 PropertyChang…

怎样去掉卷子上的答案并打印

当面对试卷答案的问题时&#xff0c;一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片&#xff0c;然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心&#xff0c;但它确实为我们提供了一个可行的解决途径。 然…

【2024.6.22】今日科技时事:科技前沿大事件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

如何避免vue的url中使用hash符号?

目录 1. 安装 Vue Router 2. 配置 Vue Router 使用 history 模式 3. 更新 main.js 4. 配置服务器以支持 history 模式&#xff08;此处需要仔细测试&#xff09; a. Nginx 配置 b. Apache 配置 5. 部署并测试 总结 在 Vue.js 项目中&#xff0c;避免 URL 中出现 # 符号的…

docker-compose功能、操作

文章目录 前言主要功能基本用法 前言 docker-compose 是一个用于定义和运行多容器 Docker 应用的工具。它使用一个 YAML 文件&#xff08;通常命名为 docker-compose.yml&#xff09;来配置应用的服务、网络和卷等属性。通过 docker-compose&#xff0c;你可以利用一个单一的命…

YAML 入门教程

YAML 是 "YAML Aint a Markup Language"&#xff08;YAML 不是一种标记语言&#xff09;的递归缩写&#xff0c;是一种人类可读的完整的数据序列化语言。YAML 的意思其实是&#xff1a;"Yet Another Markup Language"&#xff08;仍是一种标记语言&#xf…

宝塔部署GeoServer教程

前期准备&#xff1a;下载geoserver 直接用我上传的geoserver或者是去官网下https://geoserver.org/release/stable/ 压缩包的geoserver版本是&#xff1a;2.25.1 jdk要求版本是&#xff1a;jdk11以上 tomcat版本&#xff1a;可选8或者9&#xff0c;建议用9 windows选择Window…

linux./xxx.py :Command not found

从windows传入linux系统中的py文件&#xff0c;在运行时出现了如标题所示的错误 第一行#!/bin/python3 但是却无法使用./xxx.py运行&#xff0c;通过一番调试&#xff0c;发现 windows的换行符与linux的换行符不一致导致了错误的发生 如何解决这个问题&#xff0c;使用dos2unix…

视频监控统一管理平台LntonCVS安防视频监控系统视频汇聚方案

LntonCVS平台最初被设计为一个以视频汇聚为核心的平台。那么&#xff0c;什么是视频汇聚平台&#xff0c;以及它是如何处理视频资源的呢&#xff1f;简单来说&#xff0c;视频汇聚平台能够从不同的视频源&#xff08;如直播和点播&#xff09;收集、整合和展示视频内容。以下是…

春天,快速恢复能量的10件小事(不妨试试)

春天快速恢复能量的十件小事&#xff0c;不妨试试随着天气回暖&#xff0c;万物都在恢复生机。 只是很多朋友感慨自己似乎总有些能量不足&#xff0c;没干什么重活累活&#xff0c;但觉得浑身疲乏&#xff0c;精神状态很低迷&#xff0c;不仅容易走神&#xff0c;而且记忆力也在…

Docker可视化web工具

docker run --restart always --name docker.ui -d -v /var/run/docker.sock:/var/run/docker.sock -p 8989:8999 joinsunsoft/docker.ui #--restart always&#xff1a;重启策略&#xff0c;只要关闭就会重启 http://192.168.10.51:8989 账号&#xff1a;ginghan 密码&#xf…

IOS Swift 从入门到精通: 函数,参数和异常

文章目录 编写函数接受参数返回值参数标签省略参数标签默认参数可变参数函数编写抛出函数运行异常函数输入输出参数总结 编写函数 函数让我们可以重复使用代码&#xff0c;这意味着我们可以编写一个函数来做一些有趣的事情&#xff0c;然后从很多地方运行该函数。重复代码通常…

Java匿名类

Java 匿名类是一种特殊的内部类&#xff0c;它没有名字&#xff0c;并且通常用来简化代码实现&#xff0c;尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为&#xff0c;而不需要创建单独的类文件。 匿名类的特点 没有名字&#xff1a;匿名类是没有名字的…

写代码必用字体

下载链接 字体下载链接 使用情况/截图 软件&#xff1a;DEV-CPP 系统&#xff1a;Win10专业版 自带判等、大于、小于等符号的专属字体

计算机组成原理网课笔记2

存储系统基本概念 CPU&#xff1a;运算器控制器。​ 作为计算机系统的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元。 ​ 主存储器的基本组成 半导体元件的原理 在电容上面的金属板加一个5V的高电平&#xff0c;产生电压差&#xff0c;电容里面的电荷就会开…

计算机系统基础实训五—CacheLab实验

实验目的与要求 1、让学生更好地应用程序性能的优化方法&#xff1b; 2、让学生更好地理解存储器层次结构在程序运行过程中所起的重要作用&#xff1b; 3、让学生更好地理解高速缓存对程序性能的影响&#xff1b; 实验原理与内容 本实验将帮助您了解缓存对C程序性能的影响…