[Rust GUI]fltk-rs的helloworld
1、安装VSCode
下载安装VSCode
安装VSCode扩展 rust-analyzer或rust-analyzer(CN)
2、安装Microsoft C++ 生成工具
访问微软官网下载生成工具,勾选使用 C++ 的桌面开发之后会自动勾选5个项目
取消勾选以下项目
用于 Windows 的 C++ CMake 工具
测试工具核心功能 - 生成工具
C++ AddressSanitizer
只保留以下两个(SDK版本不用管,Win10或Win11都行,勾什么就留什么,不用自己勾)
MSVC v143 - VS 2022 C++ x64/x86 生成工具
Windows 11 SDK (10.0.22000.0)
3、安装rust
安装前必须重启电脑
访问Rust官网下载并安装Rust
4、设置rust镜像
运行where rustc找到.cargo文件夹
在.cargo文件夹下新建无后缀文件,文件名为config,并输入以下内容,保存
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
5、安装CMake
fltk-rs和fltk-fluid都需要安装CMake,如果以捆绑库的方式运行可以跳过安装
CMake官网、腾讯软件,用IDM、Motrix等下载软件加速下载
可能的文件名:cmake-3.26.0-windows-x86_64.msi
选择Add CMake to the system PATH for all users

6、安装git
fltk-rs和fltk-fluid都需要安装git,如果以捆绑库的方式运行可以跳过安装
阿里镜像、GitClone、Git官网
可能的文件名:Git-2.40.0-64-bit.exe
7、创建项目(方式一 使用捆绑库)
-
创建
cargo new fltkdemo
cd .\fltkdemo\
cargo add fltk --features=fltk-bundled
cargo run -
解决捆绑库下载问题
注意报错提示,下载github文件失败,手动下载或修改下载地址
thread ‘main’ panicked at ‘Download bundled libraries from “https://github.com/fltk-rs/fltk-rs/releases/download/1.4.0/lib_x64-windows-msvc.tar.gz” failed’新建文件夹
fltk-lib,新建子文件夹.\fltk-lib\1.4.0(版本号要符合下载链接)
根据下载链接手动下载压缩包,放入.\fltk-lib\1.4.0文件夹
VSCode安装Live Server插件
用VSCode打开文件夹fltk-lib,点击VSCode右下角Go Live启用本地服务器
浏览器将自动打开,查看压缩包链接,例如:http://127.0.0.1:5500/lib_x64-windows-msvc.tar.gz
查看整句报错,注意.cargo\registry\src\***\fltk-sys-***\build\bundled.rs这个文件,编辑这个文件字符串:
https://github.com/fltk-rs/fltk-rs/releases/download修改为:
/*"https://gitclone.com/github.com/fltk-rs/fltk-rs/releases/download"*/"http://127.0.0.1:5500"(运行成功后Github链接记得改回来,不然影响其他项目)
(运行成功后Live Server就可以关闭了,fltk-lib文件夹也用不着了)
删除.\fltkdemo\target文件夹,修改才能有效 -
运行
重新运行cargo run,成功输出Hello,world!

8、创建项目(方式二 本地CMake编译)
安装cmake,浏览到第5段按步骤安装
安装git,浏览到第6段按步骤安装
cargo new fltkdemo2
cd .\fltkdemo2\
cargo add fltk
cargo run,成功输出Hello,world!

9、使用fltk-rs
编辑文件.\src\main.rs
use fltk::{app, prelude::*, window::Window};fn main() {let app = app::App::default();let mut win = Window::new(100, 100, 250, 100, "你好,fltk-rs!");win.end();win.show();app.run().unwrap();
}
运行cargo run,成功显示窗口

10、Fluid(GUI程序开发工具)
-
安装
安装fltk-fluid需要先安装git和CMake
cargo install fltk-fluid
在项目路径中运行cargo add fl2rust --build -
创建编译文件build.rs
在项目的根目录下添加一个build.rs文件,内容如下// build.rs fn main() {use std::path::PathBuf;use std::env;println!("cargo:rerun-if-changed=src/myuifile.fl");let g = fl2rust::Generator::default();let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());g.in_out("src/myuifile.fl", out_path.join("myuifile.rs").to_str().unwrap()).expect("Failed to generate rust from fl file!"); } -
设计界面
运行fluid打开FLTK UI Designer(UI设计器)
菜单栏 - New - Code - Class,创建一个类
菜单栏 - New - Code - Function/Method…,创建一个函数
菜单栏 - New - Group - Window…,添加一个窗口
双击Double_Window,出现预览窗口
窗口太小,拖动窗口边框右下角,往右拽拽,拉大窗口
双击预览窗口,出现属性窗口
GUI - Label,输入我的应用
Style - Color按钮,选择白色(第一行倒数第一个)
C++ - Name,输入my_win
点击Close按钮关闭属性窗口
右键预览窗口,Buttons - Button…
双击Button,出现属性窗口
GUI - Label,输入点击按钮
GUI - Position - Width,修改为64
Style - Label Color按钮,选择天蓝色(第一行倒数第二个)
Style - Color按钮,选择黑色(第一行第一个)
C++ - Name,输入btn
点击Close按钮关闭属性窗口
单击选择Button
菜单栏 - Layout - Center In Group,Horizontal和Vertical,两个都点
按钮将移动到预览窗口中央
菜单栏 - File - Save As…(Ctrl_Shift+S),命名为myuifile.fl,保存在.\src\myuifile.fl位置 -
UI文件
在src目录下创建一个fluid相关文件myuifile.rs,内容如下// src/myuifile.rs #![allow(unused_variables)] #![allow(unused_mut)] #![allow(unused_imports)] #![allow(clippy::needless_update)]include!(concat!(env!("OUT_DIR"), "/myuifile.rs")); -
main.rs
编辑文件.\src\main.rsuse fltk::{app, prelude::WidgetExt}; mod myuifile;fn main() {let app = app::App::default();let mut ui = myuifile::UserInterface::make_window();let mut win = ui.my_win.clone();ui.btn.set_callback(move |b| {b.set_label("已点击");win.set_label("已点击");println!("已点击");});app.run().unwrap(); } -
运行
cargo run

11、文档

相关文章:
[Rust GUI]fltk-rs的helloworld
1、安装VSCode 下载安装VSCode 安装VSCode扩展 rust-analyzer或rust-analyzer(CN) 2、安装Microsoft C 生成工具 访问微软官网下载生成工具,勾选使用 C 的桌面开发之后会自动勾选5个项目 取消勾选以下项目 用于 Windows 的 C CMake 工具 测试工具核心功能 - 生成…...
蓝桥杯真题05
重新排序 问题描述 给定一个数组 A 和一些查询 Li,Ri 求数组中第 Li 至第 Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可以增加多少? 输入格式 输入第一行包含…...
PMP那些事儿,备考小白看过来
一、PMP是什么? PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 其目的是为了给项目管理人员提供统一的行业标准。目前࿰…...
【数据分析实战】基于python对酒店预订需求进行分析
文章目录📚引言📖数据加载以及基本观察📑缺失值观察及处理🔖缺失值观察以及可视化🔖缺失值处理📖用户数据探索📑什么时间预定酒店将会更经济实惠?📑哪个月份的酒店预订是…...
【新2023Q2模拟题JAVA】华为OD机试 - 数组的中心位置
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:数组的中心位置 题目 给你一…...
Vue的props组件详解
const props defineProps({name: String, }); String 是在 defineProps() 函数中用来声明 name prop 的类型,表示 name 必须是字符串类型。如果父组件没有传入 name 或传入的 name 不是字符串类型,那么就会产生类型验证错误。 defineProps() 函数支持…...
抽烟行为识别预警系统 yolov5
抽烟行为识别预警系统基于yolov5网络模型智能分析技术,抽烟行为识别预警算法通过监测现场人员抽烟行为自动存档进行报警提示。我们选择当下YOLO卷积神经网络YOLOv5来进行抽烟识别检测。6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布…...
【0基础学爬虫】爬虫基础之文件存储
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...
airflow源码分析-任务调度器实现分析
Airflow源码分析-任务调度器实现分析 概述 本文介绍Airflow执行器的总体实现流程。通过函数调用的方式说明了Airflow scheduler的实现原理,对整个调度过程的源码进行了分析。 通过本文,可以基本把握住Airflow的调度器的运行原理主线。 启动调度器 可…...
一文学会数组的reduce()和reduceRight()
reduce()方法和reduceRight()方法依次处理数组的每个成员,最终累计为一个值。 它们的差别是,reduce()是从左到右处理,reduceRight()则是从右到左,其他完全一样。 [1, 2, 3, 4, 5].reduce(function (a, b) {console.log(a, b);ret…...
登录校验-Filter
上一篇介绍完了基础应用和细节,现在来完成登录校验功能基本流程: 要进入后台管理系统,必须完成登录操作,此时就需要访问登录接口Login。登录成功服务端会生成一个JWT令牌,并且返回给前端,前端会将JWT令牌存…...
C C++ Java python 分别写出不同表白girlfriend的爱心动态代码实现
C `` #include <stdio.h> #include <stdlib.h> #include <windows.h> void heart_animation() {int i, j, k; for (i = 1; i <= 6; i++) {for (j = -3; j <= 3; j++) {for (k = -4; k <= 4; k++) {if (abs(j) + abs(k) < i * 2) {printf(“I”)…...
ThreeJS-投影、投影模糊(十七)
无投影: 完整的代码: <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…...
蓝桥杯赛前冲刺-枚举暴力和排序专题1(包含历年蓝桥杯真题和AC代码)
目录 连号区间数(第四届蓝桥杯省赛CB组,第四届蓝桥杯省赛JAVAB组) 递增三元组(第九届蓝桥杯省赛CB组,第九届蓝桥杯省赛JAVAB组) 特别数的和(第十届蓝桥杯省赛CB组,第十届蓝桥杯省赛JAVAB组) 错误票据&a…...
Github库中的Languages显示与修改
目录 前言 【.gitattributes】文件 修改GitHub语言 前言 上传一个项目到GitHub时,发现显示的语言并非是自己项目所示的语言,这样的情况是经常发生的,为了能到达自己所需快速检索,或者是外部访问者能很好的搜索我们的项目&#…...
RocketMQ消息高可靠详解
文章目录 消息同步策略殊途同归同步基于offset而不是消息本身刷盘策略RocketMQ broker服务端以组为单位提供服务的,拥有着一样的brokerName则认为是一个组。其中brokerId=0的就是master,大于0的则为slave。 消息同步策略 master和slave都可以提供读服务,但是只有master允许…...
【python设计模式】4、建造者模式
哲学思想: 建造者模式的哲学思想是将复杂对象的创建过程分解成多个简单的步骤,并将这些步骤分别封装在一个独立的建造者类中。然后,我们可以使用一个指挥者类来控制建造者的调用顺序,以便在每个步骤完成后正确地构建复杂对象。 …...
【全网独家】华为OD机试Golang解题 - 机智的外卖员
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 如果想要在华为od机试中获取高分…...
Sentinel滑动时间窗限流算法原理及源码解析(中)
文章目录 MetricBucketMetricEvent数据统计的维度WindowWrap样本窗口实例 范型T为MetricBucket windowLengthInMs 样本窗口长度 windowStart 样本窗口的起始时间戳 value 当前样本窗口的统计数据 其类型为MetricBucket MetricBucket MetricEvent数据统计的维度 1、首先计算27t位…...
【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务
【OpenLayers】VUEOpenLayersElementUI加载WMS地图服务准备工作安装vue创建vue项目安装OpenLayers安装ElementUI加载wms地图服务准备工作 需要安装好nodejs,nodejs下载地址,下载对应的版本向导式安装即可。 安装完成后,控制台输入node -v&a…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
