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

2024-06-22 16:12

本文主要是介绍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.运行结果

 

这篇关于qt 简单实验 一个可以向右侧拖拽缩放的矩形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084773

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

chart 完成拓扑图单节点拖拽不影响其他节点位置

就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。 拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。 参考 https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9 https://echarts.baidu.com/exa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

宝塔面板部署青龙面板教程【简单易上手】

首先,你得有一台部署了宝塔面板的服务器(自己用本地电脑也可以)。 宝塔面板部署自行百度一下,很简单,这里就不走流程了,官网版本就可以,无需开心版。 首先,打开宝塔面板的软件商店,找到下图这个软件(Docker管理器)安装,青龙面板还是安装在docker里,这里依赖宝塔面板安装和管理docker。 安装完成后,进入SSH终端管理,输入代码安装青龙面板。ssh可以直接宝塔里操作,也可以安装ssh连接

QT 中ListView和ListWidget有什么区别

ListView和ListWidget在Qt框架中都是用于显示列表数据的控件,但它们在使用方法和特性上存在一些明显的差异。以下是关于它们用法不一样的地方的详细分析: 数据管理方式: ListView:使用QAbstractItemModel数据模型来管理和显示列表数据。QAbstractItemModel是一个抽象类,允许开发者自定义数据模型以适应特定的数据结构和需求。这使得ListView在处

高性能并行计算华为云实验五:

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建PageRank源码 3.2 makefile的创建和编译 3.3 主机配置文件建立与运行监测 四、实验结果与分析 4.1 采用默认的节点数量及迭代次数进行测试 4.2 分析并行化下节点数量与耗时的变化规律 4.3 分析迭代次数与耗时的变化规律 五、实验思考与总结 5.1 实验思考 5.2 实验总结 E

XMG Quartz2D的简单使用

// //  Quratz2DView.m //  Quartz2D // //  Created by 王宁 on 16/5/6. //  Copyright © 2016年 ylshmacmini. All rights reserved. // #import "Quratz2DView.h" //Quartz@2D是一个二维绘图引擎,同时支

网页脚本输入这么简单

如何在网页中进行脚本操作呢? 研究了一下,很简单,用google浏览器的Console直接操作javaScript。思路: Created with Raphaël 2.1.0 开始 输入(如何输入) 点击(如何点击) 结束 下面是,通过脚本刷直播屏的实现,直接在Console输入即可 var words=new Arra