Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)

2023-05-16

Qt调整图片的显示高宽做得十分人性化,只需要在scene和view中支持鼠标滚动轮即可。不过有时候有一些特殊的要求,比如,如何在视窗内实现适合视察的宽度和高度。

注意:这里是指调整图片的显示大小,例如一张800x600的图片,图片大小是不变的,只是显示成任意大小,Qt提供了一个函数scale,同时,配套使用的是transform,算法的基本原理是这样的,

class GraphViewer : public QGraphicsView
{
....
}


int GraphViewer::fitWidth()
{
    QTransform tf = transform();
    qreal rx = tf.m11();  // this is X scale
    //qreal ry = tf.m22();
    int vw = rect().width();
    int sw = scene()->sceneRect().width();
    qreal rw = (qreal)vw/sw;
    if( (0==rx) || (abs(rw-rx)< 0.000001) ) {
        return 0;
    }

    qreal ratio = rw /rx;
    scale(ratio, ratio);
    return 0;
}

这里,scale中的两人个参数表示x, y 轴的显示比例,transform中的m11, m22则分别对应这两个比例。

这里特别注意的是,

qreal ratio = rw /rx;

如果我们使用

qreal ratio = rw;

那么在rw不为1.0的情况下,多执行几次fitWidth,图片会越来越小,或越来越大;因为scale是累积相乘。所以正确的做法是,前一次的视图比例乘 1/rx 后,相当于该维度上scale会被置为1.0,然后,再乘以我们想要的rw(适合宽度)的视图比,就能使图片正好适合视察宽度了。

本文结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight) 的相关文章

  • Xorg 的认识

    1 什么是X Window服务器 xff1f 一种图形用户界面只不过是运行在系统上的一个应用程序 它不是 Linux内核的一部分 xff0c 也没有 集成在你的系统里 它是一个可以为你的工作站提供图形化工作界面的强大工具 由于标准的重要性
  • 利用Python获取带合并单元格的表格数据

    由于在日常运维中经常出现一些合并单元格的表格 xff0c 如果要获取数据比较麻烦 xff0c 现将将封装成类 xff0c 并通过调用list excel data 获取列表形式的数据 dict excel data xff1a 获取字典格式
  • 输出不重复的数组元素

    include lt stdio h gt include lt stdlib h gt include lt math h gt int main int n int f 61 1 scanf 34 d 34 amp n int a n
  • UDP编程之windows socket 缓冲区默认大小

    笔者遇到下位机发过来的几百k的文件 xff0c 为了调试方便 xff0c 一开始并没有加协议 后面发现在OnRecv的回调中打印消息时 xff0c 居然UDP丢包了 后面经过多次分析 xff0c 才发现windows默认的socket缓冲区
  • Wmmem占用内存、CPU过多

    Wmmem占用内存 CPU过多 1 问题描述2 解释 2 1 Vmmem是啥2 2 解决办法 1 问题描述 Windows10中 xff0c 没跑啥软件 xff0c 就看见内存满了 Vmmem占用最多 2 解释 2 1 Vmmem是啥 wi
  • Java基础篇:反射机制详解

    一 什么是反射 xff1a xff08 1 xff09 Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息 xff0c 从而操作类或对象的属性和方法 本质是JVM得到class对象之后 xff0c 再通过class对象进行反编
  • 使用linux裁剪树莓派完整sd卡镜像

    解决了最小镜像的制作问题以后 xff0c 就发现手里已经积攒了不少用Win32DiskImager制作的完整sd卡镜像 虽然压缩过了以后很小 xff0c 但是在恢复镜像时32G大小的写入速度简直慢到龟速 xff0c 所以我通过Ubuntu来
  • Arch 安装中文输入法

    推荐安装小狼毫输入法 安装 从官方仓库安装ibus软件包 xff1a span class hljs comment pacman S ibus span 此外 xff0c 为了启动ibus的Qt应用程序支持 安装ibus qt软件库 xf
  • angular11报错Can‘t bind to ‘ngForOf‘ since it isn‘t a known property of ‘tr‘. 三种排查办法以及解决方案

    当你遇到Can t bind to ngForOf since it isn t a known property of tr 34 无法绑定到 ngforof xff0c 因为它不是 tr 的已知属性 xff08 可能问题一 xff1a
  • 如何禁止DELETE、PUT、OPTIONS、TRACE、HEAD等协议访问应用程序

    简介 WebDAV xff08 Web based Distributed Authoring and Versioning xff09 是基于 HTTP 1 1 的一个通信协议 它为 HTTP 1 1 添加了一些扩展 xff08 就是在
  • c++对象模型系列

    一 指针与引用 一 概括 指针和引用 xff0c 在C 43 43 的软件开发中非常常见 xff0c 如果能恰当的使用它们能够极大的提 高整个软件的效率 xff0c 但是很多的C 43 43 学习者对它们的各种使用情况并不是都了解 xff0
  • ProxmoxVE 6.4-13 (PVE)安装 OpenWrt

    创建虚拟机没什么好说的 xff0c 和大多数教程一样 xff0c 主要记录下我遇到的问题 img2kvm报错 storage 39 vm 103 disk 0 39 does not exist 吐槽 xff1a 这玩意官网打不开 xff0
  • IOS学习笔记8—UITableViewController

    UITableViewController是IOS开发中一个比较重要的试图控制器 xff0c 是集成了UITableView视图的控制器 xff0c 在实际开发中经常用到 xff0c 功能非常强大 xff0c 可定制性也很高 xff0c 下
  • nanodet阅读:(2)正负样本定义(ATSS)

    一 前言 本篇博客主要是ATSS部分 xff0c 这部分个人认为是核心之一 xff0c 毕竟正负样本的选择很重要 xff0c ATSS论文证实 xff0c anchor based和anchor free性能差异的根本原因在于正负样本的定义
  • nanodet阅读:(3)Loss计算及推理部分

    一 前言 loss的计算是一个AI工程代码的核心之一 xff0c nanodet的损失函数与yolo v3 5系列有很大不同 xff0c 具体见Generalized Focal Loss xff0c 说实话一开始看这个损失函数博客 xff
  • nanodet阅读:(1)概述

    一 前言 出于某些需要 xff0c 阅读一下anchor free模型的代码 xff0c 因为之前用过nanodet xff0c 对其印象深刻 xff0c 所以重温一下代码 好记性不如烂笔头 xff0c 多记录 多总结 多分享 正如作者博客
  • c++循环引用

    虽然C 43 43 11引入了智能指针的 xff0c 但是开发人员在与内存的斗争问题上并没有解放 xff0c 如果我们使用 不当仍然有内存泄漏问题 xff0c 其中智能指针的循环引用缺陷是最大的问题 main cpp test Create
  • JupyterLab使用教程

    JupyterLab使用教程 一 Jupyter简介1 用户接口2 架构原理1 xff09 IPython Kernel2 xff09 Jupyter Notebook接口3 xff09 Notebook导出为其它格式4 xff09 Pro
  • Python虚拟环境(pipenv、venv、conda一网打尽)

    Python虚拟环境详解 一 什么是虚拟环境1 什么是Python环境2 什么是虚拟环境3 常用工具 二 pipenv1 安装pipenv2 命令概览3 pipenv基本使用1 xff09 创建虚拟环境2 xff09 激活虚拟环境3 xff
  • MERGE INTO用法更新和插入多条子记录

    lt update id 61 34 addMarkChild 34 parameterType 61 34 java util HashMap 34 gt MERGE INTO t kpi simu detail person dp US

随机推荐

  • 51 nod 1255 字典序最小的子序列

    http www 51nod com onlineJudge questionCode html problemId 61 1255 思路 xff1a 分三种情况 xff1a 1 xff1a 栈空 xff0c 直接将字母压入 2 xff1a
  • C++ thread.join 与 terminate

    C 43 43 11 std thread join 主要函数注意事项原因解决方案 std thread 是C 43 43 11的新特性 xff0c 对于windows来说 xff0c 取代了原来的静态方法的创建方式 DWORD WINAP
  • 算法-计算无向图中两个节点之间所有的路径

    图论 寻找节点间所有路径 最近在论文中 xff0c 要获得节点间的路由 xff0c 由此又开始继续去年的算法学习 下面的就关于寻找两个节点之间所有的路径 因为是在获得路径后 xff0c 再加上权重 xff0c 所以不能将那些求最短路径的算法
  • 算法-图论_关键节点的判断

    无向图的关节点 概述 xff1a 在网络中关节点的判断将成为影响网络连通性的主要因素 节点之间通过关键点传递信息 xff0c 如在我们以太网中的网关 当网关节点失效 xff0c 那么两个网络之间的节点就不能够进行通信 在无线传感器网络中 x
  • Mongodb锁机制

    Mongodb锁机制 Mongodb使用读写锁来允许很多用户同时去读一个资源 xff0c 比如数据库或者集合 读采用的是共享锁 xff0c 写采用的是排它锁 对于大部分的读写操作 xff0c WiredTiger使用的都是乐观锁 xff0c
  • 利用pycharm创建第一个django项目

    利用pycharm创建第一个django项目 最近把python的基本语法还有一些绘图chart学习完了 xff0c 开始django学习之路 xff0c 它是个免费的强大的开源web框架 安装好python 下载pycharm之后 xff
  • VSCode中调试nodejs

    VSCode中调试nodejs 项目中用node去编译脚本 xff0c 尝试调试 1 下载nodejs 下载网址 xff1a https nodejs org zh cn 我是安装在windows环境中 xff0c 所以选择 2 启动VS
  • Bilateral Upsample

    bilateral的原理和方法已经了解过 xff0c 借鉴Bilateral的方法进行上采样 xff0c 可以使用输入的图像作为先验 xff0c 引导低分辨图像恢复成原分辨的图像 xff0c 这里简要介绍如下 xff1a 1 首先看一下联合
  • 注册表

    1 概述 是微软的一个数据库 xff0c 用于存储系统和应用程序的设置信息 参数包括控制windows的启动 xff0c 硬件驱动及windows应用程序的运行 非常重要 xff0c 谨慎操作 数据结构 注册表由键 xff0c 子键 xff
  • VS以管理员权限打开

    描述 在VS进行debug的时候 xff0c 会提示使用管理员的权限进行调试 经常出现重新打开程序的问题 xff0c 所以干脆将VS直接设置为默认管理员的角色运行 1 找到程序目录 C Program Files x86 Microsoft
  • ABAQUS仿真结果云图不对称问题

    问题描述 xff1a 在某次使用ABAQUS进行冲压仿真的过程中 xff0c 本应产生基本对称的应力应变云图 xff0c 但是结果显示并不对称 解决方法 xff1a 设置幅值曲线 ABAQUS幅值曲线介绍 在ABAQUS中 xff0c 通过
  • GreenHills基本操作:调试

    1 编译 1 1 整体编译 1 2 编译是否优化选项 或 2 调试 2 1 进入调式 2 2 调试下载 2 3 跳转至具体行 2 4 函数调用过程查看 2 5 通过文件树查找指定文件 2 6 快速查看所需函数 xff0c 设置断点
  • ROS2 humble + windows10,如何安装调试rplidar a1激光扫描传感器

    玩ROS一直是在ubuntu xff0c 最近因为各种原因 xff0c 在windows10上调试ROS2 这一典型的问题是 xff0c 很多硬件都是没有库文件的支持 xff0c 国内的很多硬件也大多只支持ROS1 完全不调试源码直接使用各
  • CloudCompare源码分析_显示渲染的程序架构

    这一讲介绍一下CloudCompare的大致绘制流程或者说绘图框架的结构 根据前面一篇对CloudCompare读取PLY文件的介绍 xff0c 很容易找出当cloudcompare读取到mesh文件 xff08 newGroup xff0
  • CloudCompare源码分析_八叉树(Octree)算法基础CC中的八叉树结构

    官方参考地址 xff1a CloudCompare octree CloudCompareWiki CC的octree算法主要体现在DgmOctree h和DgmOctree cpp中 xff0c 他采用了一种分级的结构 xff0c 最大支
  • VisualStudio2019无法正常使用printf或std::cout(卡死)的解决办法

    相信很多人碰到过这个问题 xff0c 就是在使用vs2019时 xff0c 即使是一个非常简单的程序 xff0c 如 xff0c include lt stdio h gt int main int argc char args print
  • cv2.imshow error: The function is not implemented. Rebuild the library with Windows...

    在python中调用cv2 imshow xff0c 出现这个一个报错 xff1a cv2 error OpenCV 4 5 5 D a opencv python opencv python opencv modules highgui
  • PySpark ERROR: Python in worker has different version 3.9 than that in driver 3.8

    在wiindows环境下 xff0c 使用PySpark的时候报错 xff1a Python in worker has different version 3 9 than that in driver 3 8 PySpark canno
  • table()函数--R语言

    函数功能 xff1a table uses the cross classifying factors to build a contingency table of the counts at each combination of fa
  • Qt开发高级进阶:如何在显示时适合视窗宽度和高度(fitWidth+fitHeight)

    Qt调整图片的显示高宽做得十分人性化 xff0c 只需要在scene和view中支持鼠标滚动轮即可 不过有时候有一些特殊的要求 xff0c 比如 xff0c 如何在视窗内实现适合视察的宽度和高度 注意 xff1a 这里是指调整图片的显示大小