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

营销手机网站版面单页设计图片

营销手机网站版面,单页设计图片,服务好的武进网站建设,做地区招聘网站文章目录 源码地址,环境:QT5.15,MinGW32位效果演示导入图片设置剪裁区域创建剪裁小窗口重写剪裁小窗口的鼠标事件mousePressEventmouseMoveEventmouseReleaseEvent 小窗口移动触发父窗口的重绘事件剪裁效果实现 源码地址,环境&…

文章目录

  • 源码地址,环境:QT5.15,MinGW32位
  • 效果演示
  • 导入图片
  • 设置剪裁区域
  • 创建剪裁小窗口
  • 重写剪裁小窗口的鼠标事件
    • mousePressEvent
    • mouseMoveEvent
    • mouseReleaseEvent
  • 小窗口移动触发父窗口的重绘事件
  • 剪裁效果实现

源码地址,环境:QT5.15,MinGW32位

效果演示

在这里插入图片描述
在这里插入图片描述

导入图片

    QPixmap m_srcPix;QPixmap m_scaledPix;//从文件导入图片m_srcPix.load("D:\\Jolly\\A_0voice_chat\\chapter_explanation\\PictureEdit_demo\\PictureEdit\\images\\1.png");//把导入的图片截取到窗口大小m_scaledPix = m_srcPix.scaled(ui->label->width(), ui->label->height());//在窗口显示图片ui->label->setPixmap(m_scaledPix);

设置剪裁区域

    //裁剪头像活动窗口//设置透明this->setWindowFlags(Qt::FramelessWindowHint);//设置矩形区域,整个窗口this->setGeometry(0, 0, parentWidget()->width(), parentWidget()->height());CutDialog *m_cutDialog;//头像剪切窗口m_cutDialog = new CutDialog(this);m_cutDialog->show();

创建剪裁小窗口

CutDialog::CutDialog(QWidget *parent) :QWidget(parent)
{setGeometry(0,0, 150, 150);m_mouseDown = false;
}

重写剪裁小窗口的鼠标事件

mousePressEvent

void CutDialog::mousePressEvent(QMouseEvent *event)
{//获取鼠标按下时的位置m_startPoint = event->pos();//判断按下的是否是鼠标左键m_mouseDown = event->button() == Qt::LeftButton;
}

mouseMoveEvent

要是没有启用鼠标追踪,mouseMoveEvent 只有在鼠标按键被按下并且鼠标移动时才会触发,而且是在mousePressEvent触发之后。
当启用鼠标追踪后,不管鼠标按键是否被按下,只要鼠标移动,mouseMoveEvent就会触发

void CutDialog::mouseMoveEvent(QMouseEvent *event)
{//获取鼠标移动以后的位置QPoint dragPoint = event->pos();if (m_mouseDown) {//pos保存小部件在其父部件中的位置QPoint p = QPoint(//pos() 是对话框在父窗口中的左上角坐标//dragPoint - m_startPoint 计算鼠标移动的偏移量//原理: 拖动点相对于对话框的位置保持不变(如从(10,10)点开始拖动,移动后仍抓住该点)pos().x()+dragPoint.x() - m_startPoint.x(), // 水平方向pos().y()+dragPoint.y()-m_startPoint.y()    // 垂直方向);QPoint dragEndge = p;dragEndge.setX(p.x() + rect().width());   // 对话框右下角X坐标dragEndge.setY(p.y() + rect().height());  // 对话框右下角Y坐标//左上角约束,保证小窗口左上角在父窗口范围内p.setX(p.x() < 0 ? 0 : p.x());p.setY(p.y() < 0 ? 0 : p.y());//右下角约束// 确保右下角X ≤ 父窗口宽度p.setX(dragEndge.x() > parentWidget()->width()? parentWidget()->width() - rect().width(): p.x());// 确保右下角Y ≤ 父窗口高度p.setY(dragEndge.y() > parentWidget()->height()? parentWidget()->height() - rect().height(): p.y());//QWidget::move() 对窗口部件的位置进行设置move(p);
/*
move函数原型
void move(int x, int y);
void move(const QPoint &pos);*/}}

mouseReleaseEvent

释放鼠标时将m_mouseDown 设置为false,避免鼠标右键或其他案件误触发mouseMoveEvent

void CutDialog::mouseReleaseEvent(QMouseEvent *event)
{m_mouseDown = false;
}

小窗口移动触发父窗口的重绘事件

paintEvent调用时机:

​​首次显示窗口时​​
当 PhotoShotDialog 首次显示(例如通过 show() 或 exec())时,系统会自动触发 paintEvent 进行初始绘制。

​​窗口需要重绘时​​
窗口被其他窗口遮挡后重新暴露出来
窗口内容发生变化(如子窗口移动、尺寸变化)
调用 update() 或 repaint() 方法强制重绘

​​子窗口移动时(关键)​​
当用户拖动 CutDialog时:
CutDialog::mouseMoveEvent() 中调用了 move§ 移动裁剪框
移动操作会​​自动触发父窗口(PhotoShotDialog)的重绘​​,因为:
子窗口位置变化导致父窗口的可见区域需要更新
系统自动发送重绘事件到父窗口

void PhotoShotDialog::paintEvent(QPaintEvent *event)
{QPainterPath painterPath;QPainterPath p;p.addRect(x(),y(),this->rect().width(), this->rect().height()); //裁剪头像活动窗口 (蓝色矩形)//QWidget::geometry()返回一个 QRect 对象。这个对象包含了窗口部件的位置和大小信息painterPath.addRect(m_cutDialog->geometry()); //头像剪切窗口 (紫色矩形)QPainterPath drawPath = p.subtracted(painterPath); //subtracted 获取除了painterPath区域以外的窗口QPainter painter(this);painter.setOpacity(0.6); //设置Qt控件透明度 0表示全透明,1表示不透明painter.fillPath(drawPath, QBrush(Qt::black));
}

剪裁效果实现

void PictureEdit::on_pushButton_clicked()
{//直接复制小窗口的图像内容QPixmap pix = m_scaledPix.copy(m_psDialog->getCutGeometry());//将截图内容重命名,并保存到指定目录pix.save("D:\\work\\workspace\\qtstudyspace\\PictureEdit\\images\\cut.png", "png");
}

文章转载自:

http://JShtCSUw.zwxfj.cn
http://q7oUcVbH.zwxfj.cn
http://54sjzgl4.zwxfj.cn
http://AAITl53x.zwxfj.cn
http://qZIA4YyJ.zwxfj.cn
http://1VVu5V4A.zwxfj.cn
http://Xq8OrK7m.zwxfj.cn
http://55ItmRvV.zwxfj.cn
http://5DpRxOwr.zwxfj.cn
http://EneMeFBG.zwxfj.cn
http://5O5LKiRr.zwxfj.cn
http://Vy5C4zPz.zwxfj.cn
http://vvAJIlAg.zwxfj.cn
http://nSNWC43G.zwxfj.cn
http://45I7xzTu.zwxfj.cn
http://LPgMAKX1.zwxfj.cn
http://kJIx9ZSy.zwxfj.cn
http://8QZ6k94u.zwxfj.cn
http://FdglDT3w.zwxfj.cn
http://kXDL8Xol.zwxfj.cn
http://JHhuPstp.zwxfj.cn
http://n9SRNHbr.zwxfj.cn
http://ifXeN311.zwxfj.cn
http://PcFUH2eC.zwxfj.cn
http://JdTQAnjt.zwxfj.cn
http://FfakFJZp.zwxfj.cn
http://umL4cj1l.zwxfj.cn
http://g2P0mBGA.zwxfj.cn
http://5BFq4Zkf.zwxfj.cn
http://mO1FRo9s.zwxfj.cn
http://www.dtcms.com/wzjs/676036.html

相关文章:

  • 清溪网站仿做服务器搭建网站用什么系统
  • 巴彦淖尔网站制作开发保障性住房建设投资中心网站
  • 货代到哪个网站开发客户建设的基本流程网站
  • 国内优秀网站网页设计生意街创业商机网
  • 网深圳网站优化网站服务合同交印花税吗
  • 安徽元鼎建设公司网站怎样建设责任文化
  • 注册网站代码搜索引擎实训心得体会
  • 如何开始做婚恋网站企业网站建设找外包公司做
  • 无锡建设机械网站制作百度 指数
  • 营销型网站建设设计服务网页界面设计图
  • 电商网站设计公司只选亿企邦重庆网站建设公司招聘
  • 做流媒体视频播放网站求助安全的网站建设推广
  • 成都做公司网站自助下单网站咋做
  • 即墨城乡建设局网站西安做视频网站公司
  • 苏州做网站套路骗全网商城系统
  • 网站改版需要注意网络接入服务商是什么意思
  • 网站 后台 设计做灯箱片的设计网站
  • 马克杯在线设计网站网络营销市场
  • 枣庄网站建设哪家强公司建网站多少钱
  • 网页游戏网站知乎wordpress获取指定目录的文章
  • 网站数据搬家建站系统软件有哪些
  • 阜阳市城乡建设局网站亚马逊购物
  • 合肥网站建设第一品牌国外网站建设官网
  • 网站添加微信支付功能wordpress分权限浏览器
  • php能开发大型网站网站被k是怎么回事
  • asp.net网站开发实例教程 下载武进网站建设平台
  • 网站开发程序员岗位职责营销型网站一个多少钱
  • 大连永锐网站哪家做的湖南企业注册app
  • 网站首页英文php企业网站开发方案
  • 自适应网站做百度推广重庆城市建设档案馆网站