首页 > 其他分享 >qt截图软件中画箭头代码原理

qt截图软件中画箭头代码原理

时间:2023-08-07 11:36:05浏览次数:29  
标签:newPath 截图 lineTo qt lineOrigin line1 QLineF setLength 中画


截图工具中,需要画一个指向箭头

qt截图软件中画箭头代码原理_ide

 

该箭头的形状解析示意图如下所示,

qt截图软件中画箭头代码原理_qt_02

对应的qt代码如下:

 

// 画出一个箭头线,主要是算出这几个点。
// 这个箭头形状是这样的,胖嘟嘟的那种,但是出发点是一个细的
QLineF lineOrigin(mPosStart,mPosEnd);
lineOrigin.setLength(lineOrigin.length()-arrowHeight);
QPoint offset(lineOrigin.dx(),lineOrigin.dy());
lineOrigin.setLength(arrowHeight);
lineOrigin.translate(offset);

//返回以相同起点的它的垂直线
QLineF line1 = lineOrigin.normalVector();
QLineF line2 = line1;
line1.setLength(arrowBottomInside/2);
line2.setLength(arrowBottom/2);


QLineF line3 = line2.normalVector().normalVector();

QLineF line4 = line3;
line4.setLength(arrowBottomInside/2);

newPath.moveTo(mPosStart);
newPath.lineTo(line1.p2().toPoint());    
newPath.lineTo(line2.p2().toPoint());
newPath.lineTo(mPosEnd);
newPath.lineTo(line3.p2().toPoint());
newPath.lineTo(line4.p2().toPoint());
newPath.lineTo(mPosStart);

提示:QLineF QLineF::normalVector()函数作用,返回以相同起点的它的垂直线

 

 

 

 

标签:newPath,截图,lineTo,qt,lineOrigin,line1,QLineF,setLength,中画
From: https://blog.51cto.com/u_13682052/6991952

相关文章

  • 【Qt6】QWidgetAction 的使用
    在开始主题前,先看一个C++例子:#include<iostream>structData{inta;intb;};//注意这里structData*s;voiddoSome(){Datak;k.a=100;k.b=300;//注意这里,会出大事s=&k;}intmain(){//先调用了函数doSo......
  • MQTT介绍
    一、MQTT简介《MQTT协议规范中文版》一书中对MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)进行了描述:MQTT是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好......
  • QT QML 使用布局
    前言既然qml主要用于写前端界面,那么布局管理肯定是相当重要的部分。下面就介绍QML布局管理中的定位器(Positioners)和Layouts。定位器(Positioners)定位器是一个容器,可以管理其中子项目的布局。定位器包括RowColumnGridFlow。如果它们的子项目不可见,宽度或高度为0,那么该......
  • Qt布局管理
    Qt布局管理布局管理最终的效果受到多方面的影响部件的大小策略部件的建议大小,受到部件的最小大小的影响部件的伸缩因子常见的布局管理器继承自QBoxLayout的QHBoxLayout和QVBoxLayoutQGridLayout,栅格布局管理,你可以设置部件占几行几列来控制部件之间的比例QSplitte......
  • 运用事件与定时器实现字幕滚动效果(Qt开发)
    1、效果展示我们经常能够在外面看到那种滚动字幕,那么就拿qt来做一个吧。2、实现思路实现一个窗口部件,这个窗口部件显示了一串文本标语,它会每t毫秒向左移动一个像素。如果窗口部件比文本宽,那么文本将会被多次重复,直到能够填满整个窗口部件的宽度为止。3、滚动窗口部件创建一个滚......
  • Qt 隐式共享
    Qt中的许多c++类使用隐式数据共享来最大化资源使用并最小化复制。隐式共享类作为参数传递时既安全又高效,因为只传递指向数据的指针,并且只有当函数写入数据时才会复制数据,即写时复制。 概述共享类由指向包含引用计数和数据的共享数据块的指针组成。 当创建共享对象时,它将引......
  • 最简单的Qt连接MYSQL的方法
    最简单的Qt连接MYSQL的方法⭐当我试图在项目中连接本地的mysql时,反复出现:QMYSQLdrivernotloaded,显示没有成功加载mysql的驱动,在网上查询了很多教程和视频,大多为互相转载且老旧,耗费了大半天还是没有构建成功,通常的解决方法是在本地构建mysql驱动(通过安装qt时勾选的src选项里......
  • Qt5Agg TxAgg和WXAgg的区别
    https://www.oschina.net/question/12_3252 AGG,全名:Anti-GrainGeometry,是一个开源的、高效的2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统上运行。主要的功能有:1、支......
  • QT(4)信号、SLOT和QMap - Addressbook例子2
    在之前的MeeGo开发者(五):QT(3)对象和继承小例子基础上,我们增加三个button,参考http://doc.qt.nokia.com/latest/tutorials-addressbook-part2.html、http://doc.qt.nokia.com/latest/tutorials-addressbook-part3.html和http://doc.qt.nokia.com/latest/tutorials-addressbook-part......
  • 初识QT、窗口以及信号槽
    1基本规范:无论是写什么样的代码,第一步都应该是创建一个程序对象#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);//创建对象并调用构造函数returna.exec();//因为是gui界面开发,那么程序的生存周期应该是一直存在的}2d......