码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 编写一款2D CAD/CAM软件(十七)绘制选择框


    通过鼠标来选中图形,一般都两种方式:

    1. 点选,鼠标点击图形边缘上某点来选中图形;
    2. 框选,按住鼠标左键并拖动形成一个矩形框,可以视完全在框在的图形被选中,或者视部分在框中的图形被选中。

    本文先来实现框选的第一部分,那就是绘制出按住鼠标左键拖动形成的矩形框。

    QPainter绘制矩形

    void

    drawRect(const QRectF &rectangle)

    void

    drawRect(int x, int y, int width, int height)

    void

    drawRect(const QRect &rectangle)

    void

    drawRects(const QRectF *rectangles, int rectCount)

    void

    drawRects(const QVector &rectangles)

    void

    drawRects(const QRect *rectangles, int rectCount)

    void

    drawRects(const QVector &rectangles)

    Qt提供了详尽的文档,以上为QPaiter绘制矩形的接口,可以根据实际的需要选择最方便的接口使用就可以了。

    封装几何矩形类

    封装几何矩形有几种定义形式:

    1. 定义一个基点Base Point,然后给定宽度width和height,但是如果矩形发生了仿射变换(比如旋转、斜切等),则需要记录变换矩阵;
    2. 定义4个角的点,例如std::vector points,但这种定义方式存在信息冗余的可能;
    3. 定义4条直线段,例如std::vector lines,很明显这种方式将比第种产生更多冗余信息。

    这里我们暂用第一种方式来实现矩形类的封装,至于内存和performance的优化我们则在后续开发中考虑。

    1. /// j-geometry-rect.h
    2. #pragma once
    3. #include "j-geometry.h"
    4. #include "j-geometry-point.h"
    5. #include
    6. namespace JNSGeometry {
    7. class JGeoRect : public JGeometry {
    8. public:
    9. JGeoRect();
    10. JGeoRect(const JGeoPoint &pos, double width, double height);
    11. JGeoRect(const JGeoRect &rect);
    12. JGeoRect &operator=(const JGeoRect &rect);
    13. bool IsGeoRect
  • 相关阅读:
    前端教程-vite
    【redis总结】
    什么是DOM(Document Object Model)?如何使用JavaScript操作DOM元素?
    Android Fragment中使用Arouter跳转到Activity后返回Fragment不回调onActivityResult
    [汇总] Docker容器详解 Macvlan 创建不同容器独立跑仿真(持续更新中)
    基于MVT的医学图像处理平台设计与实现
    iOS app 的开发要准备哪些图标图片?
    嵌入式启动细节
    接口开发-restful
    集中式状态管理<react-redux>基本使用与优化
  • 原文地址:https://blog.csdn.net/qq_35414398/article/details/138169918
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号