rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(八)按键事件

按键事件

  • ui.input:查询当前输入状态,只读,用于单个按键事件
  • ui.input_mut:可变访问,消费输入事件,防止事件重复处理,用于组合按键事件
  • key_pressed:用于单个按键
  • consume_key:用于组合按键
  • 注:以上笔记可能不完全正确 ,请自行尝试后判断用途
rust 复制代码
// 单个按键
if ui.input(|i|
    i.key_pressed(egui::Key::Enter)){
        println!("按下了:回车键");
}
// 两个按键组合
if ui.input_mut(|i|
    i.consume_key(egui::Modifiers::CTRL,egui::Key::D)){
        println!("按下了:Ctrl+D");
}
// 两个以上按键组合
if ui.input_mut(|i| {
    i.consume_key(egui::Modifiers::CTRL|egui::Modifiers::SHIFT, egui::Key::D)}) {
        println!("按下了:Ctrl+Shift+D");
}
// 单个按键
if ui.input_mut(|i|
    i.consume_key(egui::Modifiers::NONE,egui::Key::D)){
        println!("按下了:D");
}

按键事件应用

rust 复制代码
fn main() -> eframe::Result<()> {
    // 配置原生窗口参数
    let options = eframe::NativeOptions::default();
    let mut texts: Vec<String> = Vec::new();  // 文本标签列表显示的文本
    let mut edittext = String::new();         // 文本框的文本
    eframe::run_simple_native("添加删除", options, move |ctx, _frame| {
        egui::CentralPanel::default().show(ctx, |ui| {
            load_fonts(&ctx);    // 字体设置,函数定义:查看我博客:中文乱码相关章节
            let rp = ui.text_edit_singleline(&mut edittext); // 文本框
            rp.request_focus();                              // 文本框获取焦点
            
            // 回车事件
            if ui.input(|i| i.key_pressed(egui::Key::Enter)) {
                texts.push(edittext.clone()); // 将文本框内容添加到列表
                edittext.clear();             // 清空输入框
                rp.request_focus();           // 输入框获取焦点
            }
            
            // 按照列表创建标签
            for idx in &texts {
                ui.label(idx);
            }
        });
    })
}