Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?

这篇具有很好参考价值的文章主要介绍了Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注:此文适合于对rust有一些了解的朋友
iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。
rust 窗口应用,Rust窗口开发实例,rust,ui,开发语言

这是一个系列博文,本文是第三篇,前两篇的链接:
1、Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符
2、Rust UI开发(二):iced中如何为窗口添加icon图标

本篇是系列第三篇,主要关注如何在窗口上显示图片,要在窗口显示一张图片,基本上需要解决两个问题,一是图片文件导入,二是图片文件显示。这两个功能对于其他成熟语言都不是问题,文件对话框和图片渲染都不是难事,但iced是缺少对话框部件的。

所以,就要借助于第三方库,下面我们将针对这两个方面做说明。
实际窗口效果预览:
rust 窗口应用,Rust窗口开发实例,rust,ui,开发语言

一 文件对话框

至少目前为止(iced=0.10)iced中没有集成对话框功能,包括文件对话框、字体、颜色、消息等对话框都没有,但我看到其他支持rust的GUI库如egui、nwg(native-window-gui)等都是有对话框的,当然egui中是用rfd库来实现的。
所以,在本篇中,我们也是利用rfd来实现文件对话框功能。
rust 窗口应用,Rust窗口开发实例,rust,ui,开发语言
rfd是Rusty File Dialogs的简写,是跨平台的rust库,提供打开/保存对话框的功能。
rfd的官方代码:

use rfd::FileDialog;

let files = FileDialog::new()
    .add_filter("text", &["txt", "rs"])
    .add_filter("rust", &["rs", "toml"])
    .set_directory("/")
    .pick_file();

使用起来也很简单,在你的项目的Cargo.toml中添加依赖:

rfd="0.12.1"

然后在main.rs中导入:

use rfd::FileDialog;

需要注意的是,FileDialog.pickfile()函数返回的是一个枚举类型Option,里面的数据就是文件的路径。
所以,我们可以使用Some来返回此路径。

 if let Some(file)=FileDialog::new()
            .set_directory("/")
            .add_filter("all", &["*"])                  //添加文件过滤,all是显示所有类型 
            .add_filter("文本文件(*txt)", &["txt", "rs"])           //只显示文本类型
            .add_filter("图像文件(*png*jpg*bmp)", &["png","jpg","jpeg","bmp"])          //只显示图像类型
            .set_title("打开图像")
            .pick_file()
            {
   
                self.iamgepath=file.display().to_string();
            };

这样我们打开的图像的路径,就赋给了self.imagepath。

二 将图片显示在窗口界面上

我们现在已经得到了图像的路径,那么我们如何将图像显示在窗口上呢?这里需要用到iced提供的image这个功能,它是被定义为iced_widget的一个特性,即Features。Features是Rust中的一个概念,或者是一种机制。以下是rust官方手册关于Features的概念,大家自己理解一下。

  • Cargo “features” provide a mechanism to express conditional compilation and optional dependencies.
  • A package defines a set of named features in the [features] table of Cargo.toml, and each feature can either be enabled or disabled. Features for the package being built can be enabled on the command-line with flags such as --features. Features for dependencies can be enabled in the dependency declaration in Cargo.toml.

本篇说明一下如何使用image这个Features,在你的项目的Cargo.toml文件中,添加了iced依赖后,添加以下语句:

iced.features=["image"]

然后可以在main.rs中导入image:

use iced::widget::{
   text, button,slider,column,image,container};

另外,我们在本系列第二篇提到过一个第三方的图像库Image,实际上iced中处理图像也用到了这个库,所以我们将Image也添加到依赖中:

image="0.24.7"

为了不混乱iced的image和第三方image,我们在导入第三方image时,如下:文章来源地址https://www.toymoban.com/news/detail-763952.html

extern 

到了这里,关于Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NextJS开发:封装shadcn/ui中的AlertDialog确认对话框

    shadcn/ui很灵活可以方便的自己修改class样式,但是仅仅一个确认删除弹窗,需要拷贝太多代码和导入太多包,重复的代码量太多,不利于代码维护。所以进一步封装以符合项目中使用。 封装cx-alert-dialog.tsx custom-button.tsx 使用CxAlertDialog组件

    2024年02月04日
    浏览(46)
  • UG\NX二次开发 非模态消息对话框函数 UF_UI_display_nonmodal_msg

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         uc1601函数提供了一个模态消息对话框,ufun函数中还有一个非模态消息对话框,运行一次弹出一个窗口,不点确定不消失,对话框显示后不影响使用其他命令运行。         UF_UI_display_nonmodal_msg的第二个参

    2024年02月15日
    浏览(51)
  • UG\NX二次开发 一种简单的选择对话框 UF_UI_select_with_single_dialog

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         UGNX二次开发 一种简单的选择对话框       

    2024年02月13日
    浏览(52)
  • 使用WPF 打开各种对话框

    不包含任何具体操作,仅有对各种对话框的打开; 将Grid分为两部分,内部放两个stackpanel,将这两个 stackpanel分别对应Grid的1部分和2部分;       这里是放置了一个DockPanel控件,内部放置了两个StackPanel控件,一个TextBlock控件,这里需要注意的函数设置:DockPanel.Dock设置停靠位

    2024年02月15日
    浏览(43)
  • UG\NX二次开发 使用BlockUI设计对话框时,如何设置默认的开发语言?

    文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,CC++,Qt-CSDN博客 NX二次开发使用BlockUI设计对话框时,如何设置默认的代码语言? 依次打开“文件”-“实用工具”-“用户默认设置”-“用户界面”-“操作记录”-“C++”。   

    2024年02月11日
    浏览(57)
  • JavaScript 两种方案打开文件对话框

    在编写项目时,难免会遇到想要用户上传文件的场景。文件流处理之前的第一关是打开文件对话框让用户选取文件,本文主要讲解如何打开这个文件对话框,同时带来了一种对于文件系统操作的新概念 API。 要明确一点的是文件对话框是浏览器的功能,开发者不能自定义文件

    2024年02月07日
    浏览(62)
  • PyQt5 框架搭建+实战(多窗口打开,文件对话框)

    1.Qt设计师界面创建主窗口 2.转化成py文件 3.建立一个主窗口类,继承Qwidget和Qt设计师生成的UI类 4.写一个main函数入口,创建app,创建主窗口类实例,show(), app.exec() 我们不要在Qt设计师生成的界面上去增加我们的代码,因为这个界面我们一直都需要修改,修改后生成新的py代码

    2024年02月02日
    浏览(60)
  • MFC 给对话框添加图片背景

    在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现。今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下: 那么,我们如何将它的背景变成如下界面呢,而且还要保留对话框的移动功能,

    2024年02月06日
    浏览(46)
  • Unity C# 打开windows对话框选择文件夹或选择文件

    unity没有提供打开windows对话框的api,在开发种也会遇到选择系统文件夹或选择系统文件的需求

    2024年04月26日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包