rust 应为可变引用“&mut egui::ui::Ui”,但找到的可变引用“&mut Ui”不应出现

c9qzyr3d  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(185)

下面是用作添加图像参考的存储库:https://github.com/emilk/egui/blob/master/examples/retained_image/src/main.rs
我得到这个错误时,试图绘制一个图像到屏幕上的这行代码:

date_backdrop.show(ui);

"不匹配的类型需要可变引用&mut egui::ui::Ui发现可变引用&mut Ui可能使用了两个不同版本的crate egui?"
不知道如何解决这个问题。仍然是新生 rust
下面是我代码:

use eframe::egui;
use egui_extras::RetainedImage;
struct InitView;

impl eframe::epi::App for InitView {
    fn name(&self) -> &str {
        "CheckIt"
    }
    
    fn update(&mut self,ctx: &eframe::egui::CtxRef,frame: &mut eframe::epi::Frame<'_>) {
        
        let date_backdrop = RetainedImage::from_image_bytes(
            "date_backdrop.png",
            include_bytes!("date_backdrop.png"),
        )
        .unwrap();
        
        //background color
        let frame = egui::containers::Frame {
            fill: egui::Color32::from_rgb(241, 233, 218),
            ..Default::default()
        };
        
        //main window
        egui::CentralPanel::default().frame(frame).show(ctx, |ui| {
            ui.heading("This is an image:");
            date_backdrop.show(ui);
           
        });
    }
}

fn main(){
    let app: InitView = InitView;
    let win_options = eframe::NativeOptions{
        initial_window_size: Some(egui::Vec2::new(386.0, 636.0)),
        always_on_top: true,
        resizable: false,
        ..Default::default()
    };
    eframe::run_native(Box::new(app), win_options);
}

这是我的货物。

[package]
name = "checkit"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
eframe = "0.14.0"
image = { version = "0.24", default-features = false, features = ["png"] }
egui_extras = { version = "0.20.0", features = ["image"] }
tp5buhyn

tp5buhyn1#

如错误所示,依赖关系树中有两个不兼容的egui版本:eframe 0.14pulls in egui 0.14,而egui_extras 0.20pulls in egui 0.20。当主版本为0时,不同的次版本被视为不兼容,因此它们的类型不可互换。
据我所知,eframeegui_extras都依赖于egui的同一个次要版本作为它们自己的版本,因此必须同步这两个依赖项以使用同一个次要版本,最简单的方法可能是将eframe迁移到0.20

相关问题