按键事件
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);
}
});
})
}