字玩FontPlayer开发笔记5 Tauri初体验

字玩FontPlayer开发笔记5 Tauri初体验

字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 + ElementUI开发,源代码:
github: https://github.com/HiToysMaker/fontplayer
gitee: https://gitee.com/toysmaker/fontplayer

笔记

字玩目前是用Electron进行桌面端应用打包,但是性能体验不太好,一直想替换成Tauri。Tauri的功能和Electron类似,都可以把前端代码打包生成桌面端(比如Windows和Mac)应用。Tauri只使用系统提供的WebView,不像Electron一样内置Chromium和Node.js,性能体验更佳。

Tauri使用Rust语言开发,对笔者来讲是一门新的语言,学习难度较大,所以迟迟没有更换框架。今天终于开始接触Rust和Tauri,在原有项目上进行了简单的Tauri配置,尽管由于对新语言和框架的生疏,距离将原有Electron代码完全替换成Tauri还有一段距离,但也算开了头。这里记录一下成果。

安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装好后在.bashrc中添加(或使用zsh的话在./zshrc中添加):

export PATH="$HOME/.cargo/bin:$PATH"

之后运行:

source ~/.bashrc

source ~/.zshrc

安装好Rust后,运行以下代码进行验证:

rustc --version
Tauri安装

安装Tauri:

cargo install tauri-cli
初始化Tauri

接着在原项目中对Tauri进行初始化:

npx tauri init

在初始化过程中会需要输入几个问题:

  1. 项目名称:fontplayer
  2. 展示名称:字玩
  3. 前端代码打包路径:…/dist
  4. 开发环境下调试url:http://localhost:5173
  5. dev运行命令:npm run dev
  6. 打包命令:npm run build
    程序会自动生成src-tauri目录和示例
调试Tauri

命令行输入:

npx tauri dev

系统会自动运行Tauri应用,如果编译没有问题的话,会弹出应用程序。

根据屏幕分辨率适应应用窗口大小

今天笔者只实现了一个最基本的小功能进行测试,根据屏幕分辨率适应应用窗口大小:窗口默认大小为1280 * 800,如果分辨率小于1280 * 800,就使用屏幕分辨率。

完整代码:
src-tauri/src.main.rs

// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]fn main() {app_lib::run();
}

src-tauri/src.lib.rs

#![allow(unused_imports)]
#![allow(unused_variables)]use tauri::{Manager, Window};
use tauri::Size;#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {tauri::Builder::default().setup(|app| {// 获取名为 "main" 的 Webview 窗口句柄let window = app.get_webview_window("main").unwrap();// 获取窗口尺寸let primary_display = window.inner_size().unwrap();let screen_width = primary_display.width;let screen_height = primary_display.height;// 获取主显示器的 DPI 缩放因子let scale_factor = window.scale_factor().unwrap();// 设置最大窗口尺寸let max_width = 1280;let max_height = 800;// 根据 DPI 缩放因子调整窗口尺寸let adjusted_width = (max_width as f64 * scale_factor) as u32;let adjusted_height = (max_height as f64 * scale_factor) as u32;// 计算窗口大小,确保窗口大小不超过屏幕大小let window_width = screen_width.min(adjusted_width);let window_height = screen_height.min(adjusted_height);// 获取窗口并设置尺寸window.set_size(Size::new(tauri::PhysicalSize::new(window_width as u32, window_height as u32))).unwrap();if cfg!(debug_assertions) {app.handle().plugin(tauri_plugin_log::Builder::default().level(log::LevelFilter::Info).build(),)?;}Ok(())}).run(tauri::generate_context!()).expect("error while running tauri application");
}

小记

虽然这几天看了一些Rust教程,但是一上手真的不容易,比如函数传参时什么时候需要传引用、对于可能包含None的返回值的unwrap使用等等,很多地方都和js有区别。笔者基础不太好,学习Rust很多地方需要对内存等底层原理理解透彻,对于笔者有一定难度。另外Tauri2相比如Tauri1改动较大,问AI代码实现总是使用老版本的api,导致调试总是报错,几乎每句话都要调试半天,幸好有时调试信息会给出修改提示,还比较有用。在网上搜Tauri的教程还不是特别全面,有些问题搜索不到,只能看官方文档自己摸索。接下来还是需要对新语言和新框架进行更深入的学习,共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503373.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Mcal》--MCU模块

一、MCU模块的主要功能 控制系统时钟的产生。控制系统通用模块,该模块会涉及到Adc、Ftm等外设的配置。控制外设时钟。控制MCU运行的模式。初始化定义RAM Section。 比较重要的是时钟的配置。 二、系统时钟的配置 1、芯片时钟树 要想弄明白时钟配置,需…

Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域,灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征,能够处理复杂和大量的数据,尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型: 卷积神经网络…

VR+智慧消防一体化决策平台

随着科技的飞速发展,虚拟现实(VR)技术与智慧城市建设的结合越来越紧密。在消防安全领域,VR技术的应用不仅能够提升消防训练的效率和安全性,还能在智慧消防一体化决策平台中发挥重要作用。本文将探讨“VR智慧消防一体化…

c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!

文章目录 前言一、c/c内存分布二、c的内存管理方式2.1new/delete操作内置类型2.2new和delete操作自定义类型 三、operator new与operator delete函数3.1operator new与operator delete函数 四、new和delete的实现原理4.1 内置类型4.2 自定义类型 五、malloc/free和new/delete的…

Android Audio基础(53)——PCM逻辑设备Write数据

1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在 ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图。: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间数据不能随便…

gesp(C++四级)(6)洛谷:B3870:[GESP202309 四级] 变长编码

gesp(C四级)(6)洛谷:B3870:[GESP202309 四级] 变长编码 题目描述 小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 2 31…

【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 二叉排序树的基本概念 2. 二叉排序树节点结构体定义 3. 创建二叉排序树 4. 判断是否为二叉排序树 5. 递归查找关键字为 6 的结点并输出查找路径 6. 删除二叉排序树中的节点 测试说明 通关代码 测试结果 任务描述 本关任务&a…

Ubuntu下的小bug

问题1: terminal 终端CtrlShfitE键与搜狗输入法冲突Linux 参考链接:https://blog.csdn.net/u011895157/article/details/131583702?fromshareblogdetail&sharetypeblogdetail&sharerId131583702&sharereferPC&sharesourceAndroid_WPF…

Qt 下位机串口模拟器

使用 vspd 创建虚拟配对串口,Qt 实现下位机串口模拟器,便于上位机开发及实时调试,适用字符串格式上下位机串口通信,数据包格式需增加自定义解析处理。 通过以下链接下载 vspd 安装包,进行 dll 破解。 链接: https://…

面试高频:一致性hash算法

这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些…

数据库1-4讲

各种名词区分 内模式也叫物理模式、存储模式。 概念模式也叫全局模式、逻辑模式。 外模式也叫用户模式。 笛卡尔积:D1、D2、D3集合中任取一个的所有可能情况。 因此上述笛卡尔积的基数22312 关系模型的三个完整性: 实体完整性&#x…

JMeter + Grafana +InfluxDB性能监控 (二)

您可以通过JMeter、Grafana 和 InfluxDB来搭建一个炫酷的基于JMeter测试数据的性能测试监控平台。 下面,笔者详细介绍具体的搭建过程。 安装并配置InfluxDB 您可以从清华大学开源软件镜像站等获得InfluxDB的RPM包,这里笔者下载的是influxdb-1.8.0.x86_…

C语言 数组编程练习

1.将数组A的内容和数组B中的内容进行交换。(数组一样大) 2.创建一个整形数组,完成对数组的操作 实现函数Init()初始化数组全为0 实现print()打印数组的每个元素 实现reverse()函数完成数组元素的逆置 //2.创建一个整形数组,完…

深度评测uni-app x:开启跨平台开发新篇章

文章目录 一、引言1.1 跨平台开发的崛起1.2 uni-app x 初印象 二、uni-app x 核心特性评测2.1 uts 语言:跨平台编程新利器2.2 uvue 渲染引擎:原生渲染新体验2.3 强大的组件和 API 支持2.4 插件生态:拓展无限可能 三、与 uni-app 对比&#xf…

wordpress开发之实现使用第三方库qrcode-generator生成二维码并上传和展示

文章目录 一、需求二、技术实现 - 利用qrcode-generator库三、代码实现 一、需求 客户的需求是能将特定的url生成二维码,以便将二维码分享或贴到合同纸上给他的客户扫描查看信息。 这个url包含的内容类似于如下格式: https://www.example.com/contrac…

vue3 数字滚动效果

效果图 代码 <template><div class"number-scroller"><divclass"viewport":style"{ width: width px, height: height px }"><div class"number-scroller-box" ref"num"><div v-for"num…

谷粒商城-高级篇-Sentinel-分布式系统的流量防卫兵

1、基本概念 1.1、熔断降级限流 1、什么是熔断 A 服务调用 B 服务的某个功能&#xff0c;由于网络不稳定问题&#xff0c;或者 B 服务卡机&#xff0c;导致功能时间超长。如果这样子的次数太多。我们就可以直接将 B 断路了&#xff08; A 不再请求 B 接口&#xff09;&#…

手机租赁平台开发实用指南与市场趋势分析

内容概要 在当今快速变化的科技时代&#xff0c;手机租赁平台的发展如火如荼。随着越来越多的人希望使用最新款的智能手机&#xff0c;但又不愿意承担昂贵的购机成本&#xff0c;手机租赁平台应运而生。这种模式不仅为用户提供了灵活的选择&#xff0c;还为企业创造了新的商机…

计算机网络 (22)网际协议IP

一、IP协议的基本定义 IP协议是Internet Protocol的缩写&#xff0c;即因特网协议。它是TCP/IP协议簇中最核心的协议&#xff0c;负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。IP协议为每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个唯一的IP…

NUTTX移植到STM32

STM32移植NUTTX 1. Ubuntu下搭建开发环境1.1 先决条件1.2 下载 NuttX1.3 使用Make 进行编译1.4 烧录运行 2.通过NUTTX点亮LED2.1 部署操作系统2.2 修改配置文件2.3 编译运行程序 开发板&#xff1a;DshanMCUF407 官方开发文档&#xff1a;安装 — NuttX latest 文档 参考文档&…