0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Rust GUI实践之Rust-Qt模块

科技绿洲 来源:TinyZ 作者:TinyZ 2023-09-30 16:43 次阅读

Rust-Qt 是 Rust 语言的一个 Qt 绑定库,它允许 Rust 开发者使用 Qt 框架来创建跨平台的图形界面应用程序。Qt 是一个跨平台的应用程序框架,它提供了一系列的工具和库,可以帮助开发者创建高质量的应用程序,包括图形界面、网络、数据库等方面。

Rust-Qt 的优势在于 Rust 语言的安全性和高性能,以及 Qt 框架的强大功能和跨平台性。使用 Rust-Qt 可以让开发者更加轻松地创建跨平台的图形界面应用程序。

基础用法

创建一个简单的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    window.show();
    app.exec();
}

这个示例演示了如何使用 Rust-Qt 创建一个简单的窗口,并设置窗口的标题和大小。

创建一个带有按钮的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::push_button::PushButton;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut button = PushButton::new(&qt_core::string::String::from("Click me!"));
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    button.move_2a(50, 50);
    button.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个按钮,并设置按钮的文本和位置。

创建一个带有标签的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::push_button::PushButton;
use qt_widgets::label::Label;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut button = PushButton::new(&qt_core::string::String::from("Click me!"));
    let mut label = Label::new(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    button.move_2a(50, 50);
    label.move_2a(50, 100);
    button.set_parent(&mut window);
    label.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个标签,并设置标签的文本和位置。

创建一个带有文本框的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::push_button::PushButton;
use qt_widgets::line_edit::LineEdit;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut button = PushButton::new(&qt_core::string::String::from("Click me!"));
    let mut line_edit = LineEdit::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    button.move_2a(50, 50);
    line_edit.move_2a(50, 100);
    button.set_parent(&mut window);
    line_edit.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个文本框,并设置文本框的位置。

创建一个带有菜单的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::menu::Menu;
use qt_widgets::menu_bar::MenuBar;
use qt_widgets::action::Action;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut menu_bar = MenuBar::new(&mut window);
    let mut file_menu = Menu::new(&qt_core::string::String::from("File"), &mut menu_bar);
    let mut exit_action = Action::new(&qt_core::string::String::from("Exit"), &mut window);
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    file_menu.add_action(&mut exit_action);
    menu_bar.add_menu(&mut file_menu);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个菜单,并设置菜单的选项。

创建一个带有复选框的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::check_box::CheckBox;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut check_box = CheckBox::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    check_box.move_2a(50, 50);
    check_box.set_text(&qt_core::string::String::from("Check me!"));
    check_box.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个复选框,并设置复选框的文本和位置。

创建一个带有单选框的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::radio_button::RadioButton;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut radio_button = RadioButton::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    radio_button.move_2a(50, 50);
    radio_button.set_text(&qt_core::string::String::from("Select me!"));
    radio_button.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个单选框,并设置单选框的文本和位置。

创建一个带有滑块的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::slider::Slider;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut slider = Slider::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    slider.move_2a(50, 50);
    slider.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个滑块,并设置滑块的位置。

进阶用法

创建一个带有表格的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::table_widget::TableWidget;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut table_widget = TableWidget::new_2a(4, 2, &mut window);
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    table_widget.move_2a(50, 50);
    table_widget.set_item(0, 0, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("Name")));
    table_widget.set_item(0, 1, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("Age")));
    table_widget.set_item(1, 0, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("Tom")));
    table_widget.set_item(1, 1, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("20")));
    table_widget.set_item(2, 0, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("Jerry")));
    table_widget.set_item(2, 1, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("30")));
    table_widget.set_item(3, 0, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("Bob")));
    table_widget.set_item(3, 1, &qt_widgets::table_widget_item::TableWidgetItem::new(&qt_core::string::String::from("25")));
    table_widget.set_parent(&mut window);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个表格,并设置表格的内容。

创建一个带有进度条的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::progress_bar::ProgressBar;
use std::thread;
use std::time::Duration;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut progress_bar = ProgressBar::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    progress_bar.move_2a(50, 50);
    progress_bar.set_range(0, 100);
    progress_bar.set_value(0);
    progress_bar.set_parent(&mut window);
    window.show();
    thread::spawn(move || {
        for i in 0..=100 {
            progress_bar.set_value(i);
            thread::sleep(Duration::from_millis(50));
        }
    });
    app.exec();
}

这个示例演示了如何在窗口中添加一个进度条,并设置进度条的范围和初始值。

创建一个带有标签页的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::tab_widget::TabWidget;
use qt_widgets::widget::WidgetTrait;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut tab_widget = TabWidget::new(&mut window);
    let mut tab1 = Widget::new().into_raw();
    let mut tab2 = Widget::new().into_raw();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    tab_widget.move_2a(50, 50);
    tab_widget.set_parent(&mut window);
    tab_widget.add_tab_2a(tab1, &qt_core::string::String::from("Tab 1"));
    tab_widget.add_tab_2a(tab2, &qt_core::string::String::from("Tab 2"));
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个标签页,并设置标签页的选项。

创建一个带有滚动条的窗口

use qt_widgets::application::Application;
use qt_widgets::widget::Widget;
use qt_widgets::window::Window;
use qt_widgets::scroll_area::ScrollArea;
use qt_widgets::label::Label;
use qt_gui::pixmap::Pixmap;
use qt_gui::image::Image;

fn main() {
    let mut app = Application::new();
    let mut window = Window::new();
    let mut scroll_area = ScrollArea::new(&mut window);
    let mut label = Label::new(&mut scroll_area);
    let mut pixmap = Pixmap::new();
    let mut image = Image::new();
    window.set_title(&qt_core::string::String::from("Hello, Rust-Qt!"));
    window.resize_2a(400, 300);
    pixmap.load_2a(&qt_core::string::String::from("image.jpg"), &qt_core::string::String::from("JPG"));
    image.set_pixmap(&pixmap);
    label.set_pixmap(&pixmap);
    scroll_area.set_widget(&mut label);
    scroll_area.move_2a(50, 50);
    scroll_area.set_widget(&mut label);
    scroll_area.set_widget_resizable(true);
    scroll_area.set_widget(&mut label);
    window.show();
    app.exec();
}

这个示例演示了如何在窗口中添加一个滚动条,并设置滚动条的内容。

最佳实践

  • • 尽可能使用 Rust-Qt 提供的 Rust 风格的 API,而不是直接使用 Qt 的 C++ 风格的 API。
  • • 在创建窗口之前,先创建应用程序对象 Application
  • • 使用 set_parent 方法将控件添加到父控件中。
  • • 在创建菜单和工具栏时,使用 Action 类来创建菜单项和工具栏项。
  • • 在使用 Qt 的图形界面设计器时,将生成的代码放在单独的模块中,以便进行修改和维护。

结论

Rust-Qt 是一个强大的 Rust 语言的 Qt 绑定库,它允许开发者使用 Rust 语言来创建跨平台的图形界面应用程序。本教程提供了 Rust-Qt 的基础用法和进阶用法的示例,以及最佳实践建议,帮助开发者更加轻松地使用 Rust-Qt 创建高质量的应用程序。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46530
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63371
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56398
  • GUI
    GUI
    +关注

    关注

    3

    文章

    611

    浏览量

    38793
  • Rust
    +关注

    关注

    1

    文章

    223

    浏览量

    6387
收藏 人收藏

    评论

    相关推荐

    Rust GUI实践之Tarui模块

    Tauri是一个用于构建跨平台本地应用程序的工具包,它使用Rust语言作为主要开发语言,可以在Windows,MacOS和Linux等平台上运行。Tauri基于Web技术栈,可以使用HTML,CSS
    的头像 发表于 09-19 16:42 3266次阅读

    Rust的 match 语句用法

    执行不同的代码,这在处理复杂的逻辑时非常有用。在本教程中,我们将深入了解 Rust 的 match 语句,包括基础用法、进阶用法和实践经验等方面。 基础用法 match 语句是 Rust 中的一种控制流语句,它可以让我们根据不同
    的头像 发表于 09-19 17:08 657次阅读

    如何在Rust中读写文件

    见的内存安全问题和数据竞争问题。 在Rust中,读写文件是一项非常常见的任务。本教程将介绍如何在Rust中读写文件,包括基础用法和进阶用法。 基础用法 读取文件内容 使用 std::fs::File 和 std::io::Read 模块
    的头像 发表于 09-20 10:57 1192次阅读

    Rust的多线程编程概念和使用方法

    和字段、常见用法以及多线程的一些实践经验。由浅入深带你零基础玩转Rust的多线程编程。 线程的基本概念和使用方法 Thread是Rust中并发编程的一种基本方式。Rust中的Threa
    的头像 发表于 09-20 11:15 506次阅读

    只会用Python?教你在树莓派上开始使用Rust

    如果您对编程感兴趣,那么您可能听说过Rust。该语言由Mozilla设计,受到开发人员的广泛喜爱,并继续在奉献者中成长。Raspberry Pi是小型计算机的瑞士军刀,非常适合学习代码。我们将两者
    发表于 05-20 08:00

    怎样去使用Rust进行嵌入式编程呢

    使用Rust进行嵌入式编程Use Rust for embedded development篇首语:Rust的高性能、可靠性和生产力使其适合于嵌入式系统。在过去的几年里,Rust在程序
    发表于 12-22 07:20

    RUST在嵌入式开发中的应用是什么

    Rust是一种编程语言,它使用户能够构建可靠、高效的软件,尤其是用于嵌入式开发的软件。它的特点是:高性能:Rust具有惊人的速度和高内存利用率。可靠性:在编译过程中可以消除内存错误。生产效率:优秀
    发表于 12-24 08:34

    如何利用C语言去调用rust静态库呢

    新语言的感觉,要做不少的对接工作。也用过Lua,感觉也差不多。评估学习评估Rust语言时,感觉性能和体积应该都不会有太大的问题。加上语言本身主打的安全性,再结合一些库,用来做一些C语言不擅长的动态操作
    发表于 06-21 10:27

    Rust代码中加载静态库时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    “ [i]malloc ”、“ [i]exit ”。我验证了使用 ` [i]nm ` 命令。 问题是我打算使用 ffi 在 rust 中使用这个静态库。当我尝试在我的 Rust 代码中加载静态库
    发表于 06-09 08:44

    Rust在虚幻引擎5中的使用

    前段时间,研究了一套 Rust 接入 Maya Plugin 的玩法,主要原理还是使用 C ABI 去交互。那我想着 UE 是使用 C++ 写的,肯定也可以使用 C ABI 去交互,如果可以的话在 UE 中就可以使用 Rust 代码去跑,甚至还可以使用
    的头像 发表于 12-21 11:05 4642次阅读

    Rust GUI 库发展现状

    Rust GUI 库发展现状 最近有一篇关于 Rust GUI 的博客,这不,kas 这个  Another GUI toolkit  框架
    的头像 发表于 12-21 15:00 2169次阅读

    Rust的内部工作原理

    Rust到汇编:了解 Rust 的内部工作原理 非常好的Rust系列文章,通过生成的汇编代码,让你了解很多Rust内部的工作机制。例如文章有 Rus
    的头像 发表于 06-14 10:34 467次阅读
    <b class='flag-5'>Rust</b>的内部工作原理

    基于Rust的Log日志库介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序中,日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log库提供
    的头像 发表于 09-19 14:49 2133次阅读

    从Rustup出发看Rust编译生态

    从Rustup出发看Rust编译生态 1. Rust和LLVM的关系是怎样的? 2. Rustup中targets是什么,为什么可以安装多个? 3. Rust在windows上为什么需要安装Visual studio?
    的头像 发表于 01-02 11:00 238次阅读

    一次Rust重写基础软件的实践

    受到2022年“谷歌使用Rust重写Android系统且所有Rust代码的内存安全漏洞为零” [1] 的启发,最近笔者怀着浓厚的兴趣也顺应Rust 的潮流,尝试着将一款C语言开发的基础软件转化
    的头像 发表于 01-25 11:21 272次阅读