当前位置: 首页 > news >正文

[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-rsfltk-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-rsfltk-fluid都需要安装git,如果以捆绑库的方式运行可以跳过安装


阿里镜像、GitClone、Git官网
可能的文件名:Git-2.40.0-64-bit.exe

7、创建项目(方式一 使用捆绑库)

  1. 创建
    cargo new fltkdemo
    cd .\fltkdemo\
    cargo add fltk --features=fltk-bundled
    cargo run

  2. 解决捆绑库下载问题

    注意报错提示,下载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文件夹,修改才能有效

  3. 运行
    重新运行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程序开发工具)

  1. 安装
    安装fltk-fluid需要先安装git和CMake
    cargo install fltk-fluid
    在项目路径中运行cargo add fl2rust --build

  2. 创建编译文件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!");
    }
    
  3. 设计界面
    运行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位置

  4. 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"));
    
  5. main.rs
    编辑文件.\src\main.rs

    use 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();
    }
    
  6. 运行
    cargo run
    在这里插入图片描述

11、文档

fltk book 中文文档
fltk - crates



请添加图片描述

相关文章:

[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)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 其目的是为了给项目管理人员提供统一的行业标准。目前&#xff0…...

【数据分析实战】基于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-投影、投影模糊(十七)

无投影&#xff1a; 完整的代码&#xff1a; <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…...

蓝桥杯赛前冲刺-枚举暴力和排序专题1(包含历年蓝桥杯真题和AC代码)

目录 连号区间数&#xff08;第四届蓝桥杯省赛CB组,第四届蓝桥杯省赛JAVAB组&#xff09; 递增三元组&#xff08;第九届蓝桥杯省赛CB组,第九届蓝桥杯省赛JAVAB组&#xff09; 特别数的和&#xff08;第十届蓝桥杯省赛CB组,第十届蓝桥杯省赛JAVAB组&#xff09; 错误票据&a…...

Github库中的Languages显示与修改

目录 前言 【.gitattributes】文件 修改GitHub语言 前言 上传一个项目到GitHub时&#xff0c;发现显示的语言并非是自己项目所示的语言&#xff0c;这样的情况是经常发生的&#xff0c;为了能到达自己所需快速检索&#xff0c;或者是外部访问者能很好的搜索我们的项目&#…...

RocketMQ消息高可靠详解

文章目录 消息同步策略殊途同归同步基于offset而不是消息本身刷盘策略RocketMQ broker服务端以组为单位提供服务的,拥有着一样的brokerName则认为是一个组。其中brokerId=0的就是master,大于0的则为slave。 消息同步策略 master和slave都可以提供读服务,但是只有master允许…...

【python设计模式】4、建造者模式

哲学思想&#xff1a; 建造者模式的哲学思想是将复杂对象的创建过程分解成多个简单的步骤&#xff0c;并将这些步骤分别封装在一个独立的建造者类中。然后&#xff0c;我们可以使用一个指挥者类来控制建造者的调用顺序&#xff0c;以便在每个步骤完成后正确地构建复杂对象。 …...

【全网独家】华为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&#xff0c;nodejs下载地址&#xff0c;下载对应的版本向导式安装即可。 安装完成后&#xff0c;控制台输入node -v&a…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...