当前位置: 首页 > news >正文

网站建设学习教程wordpress后台添加新的文章类别

网站建设学习教程,wordpress后台添加新的文章类别,.net网站开发架构,商城网站有免费建设的吗《精通Rust》里介绍了 GTK框架的开发#xff0c;这篇博客记录并扩展一下。rust 可以用于桌面应用开发#xff0c;我还挺惊讶的#xff0c;大学的时候也有学习过 VC#xff0c;对桌面编程一直都很感兴趣#xff0c;而且一直有一种妄念#xff0c;总觉得自己能开发一款很好…《精通Rust》里介绍了 GTK框架的开发这篇博客记录并扩展一下。rust 可以用于桌面应用开发我还挺惊讶的大学的时候也有学习过 VC对桌面编程一直都很感兴趣而且一直有一种妄念总觉得自己能开发一款很好用的桌面程序就和总觉得自己能彩票中大奖一样。 环境安装 可能你会需要安装 gtk3。如果执行 cargo build 的时候提示你找不到 gdk-3.0那你就需要手动安装一下 不过也不需要提前安装这些依赖。当我们执行 cargo build 编译的时候结合 rust 的错误提示进行按需安装是比较稳妥的。 功能开发 在《精通Rust》书中的16章节书中的 Demo 忽略了一个非常重要的细节就是省略了依赖包的声明没有依赖包的声明代码就缺少了灵魂编译都没有办法通过。 我在考虑要不要使用 GPT 自动生成一下源码省的麻烦。自动生成代码还是放到最后吧…可以通过这个过程来熟悉一下 rust 的函数。 std::process::exit 这个函数并不陌生使用一个 code 来退出当前的进程。要想在程序中正常调用这个函数需要导入如下的头声明 use std::process;gtk::Window 代码中使用到的组件都来自于 gtk 包为了方便起见可以将 gtk 下的声明全局导入 use gtk::*std::sync::mpsc::Sender 用来通过 channel 实现异步通讯的能力代码中用来做数据通讯有 send 和对应的 try_recv 的两个动作。如果我们不引入这个包cargo build 还会给我们另一个可选建议 glib::Sender不过这个函数的解释中提到两个方式是类似的。 use std::sync::mpsc::Senderstd::sync::mpsc::Receiver 有消息的发送就应该有消息的接受 use std::sync::mpsc::Receiverstd::sync::mpsc::channel 函数用来创建 Sender、Receive和上面两个函数是一体的它创建的是一个异步队列。创建同步队列需要调用 std::sync::mpsc::sync_channel方法。 use std::sync::mpsc::channelmod rust 在相同的目录下不同文件中声明的结构体是无法相互引用的需要通过 mod 来解决。mod 主要用来解决项目内代码组织的问题use mod xxx 会尝试去加载当前目录下的 xxx.rs 文件的代码。 在 main.rs 中的 mod hackernews 就是用来加载 hackernews.rs 中声明的导出方法或结构体。如果你将这行代码删除程序就会找不到文件中声明的 Story 结构体。 use crate::hackernews::Story;std::sync::Arc 全称是 Atomically Reference Counted表示线程安全的引用计数器。Arc 表示一个指针指向堆空间的 T 值。同时有一个附属的引用计数。 use std::sync::Arc;reqwest::Client 一个异步的 HTTP 请求客户端用来发送 HTTP 请求。在说明文档中明确强调我们不需要使用 Rc 或者 Arc 去包装这个类型内部已经使用 Arc 包装过了。 use reqwest::Client;glib::source::timeout_add 函数用于固定间隔执行闭包函数示例中的作用是固定间隔尝试接受消息。我发现rust 依赖包的做法特别接近 javascript 。 函数第一个参数的类型是 core::time::Duration这个时间概念和 Go 语言相近不过 rust 表示的是秒毫秒的单位构造时间的时候可以传递秒和毫秒两个数值。 use glib::source::timeout_add;std::ops::ControlFlow 代码示例中 ControlFlow::Continue(true)目前来看这个 Continue 的含义并不明确感觉不到它的价值。 use std::ops::ControlFlowgtk::Box | gtk::prelude::BoxExt 其中gtk::prelude::BoxExt 属于 trait 属性rust 中的 trait 等同于 go 语言的 interface 类型也是实现多态的手段之一 trait 特性需要明确声明出来否则trait 特性会被掩藏。所以下面的两个都需要导入 use gtk::Box; use gtk::prelude::BoxExt;impl App {pub fn new() - (App, ReceiverMsg) {if gtk::init().is_err() {println!(Failed to init hews window);process::exit(1);}let (tx, rx) channel();let window gtk::Window::new(gtk::WindowType::Toplevel);let sw ScrolledWindow::new(None, None);let stories gtk::Box::new(gtk::Orientation::Vertical, 20);let spinner gtk::Spinner::new();let header Header::new(stories.clone(), tx.clone());stories.pack_start(spinner, false, false, 2);sw.add(stories);window.add(sw);window.set_default_size(600, 350);window.set_titlebar(header.header);window.connect_delete_event(move |_, _| {main_quit();Inhibit(false);});}pub fn launch(self, rx: ReceiverMsg) {self.window.show_all();let client Arc::new(reqwest::Client::new());self.fetch_posts(client.clone());self.run_event_loop(rx, client);}fn fetch_posts(self, client: ArcClient) {self.spinner.start();self.tx.send(Msg::Loading).unwrap();let tx_clone self.tx.clone();top_stories(client, 10, tx_clone);}fn run_event_loop(self, rx: ReceiverMsg, client: ArcClient) {let container self.stories.clone();let spinner self.spinner.clone();let header self.header.clone();let tx_clone self.tx.clone();timeout_add(100, move || {match rx.try_recv() {Ok(Msg::NewStory(s)) App::render_story(s, container),Ok(Msg::Loading) header.disable_refresh(),Ok(Msg::Loaded) {spinner.stop();header.enable_refresh();}Ok(Msg::Refresh) {spinner.start();spinner.show();(tx_clone).send(Msg::Loading).unwrap();top_stories(client.clone(), 10, tx_clone)}Err(_) {}}Continue(true)});gtk::main();}fn render_story(s: Stroy, stories: gtk::Box) {let title_with_score format!({} ({}), s.title, s.score);let label gtk::Label::new(*title_with_score);let story_url s.url.unwrap_or(N/A.to_string());let link_label gtk::Label::new(*story_url);let label_markup format!(a href\{}\{}/a, story_url, story_url);link_label.set_markup(label_markup);stories.pack_start(label, false, false, 2);stories.pack_start(link_label, false, false, 2);stories.show_all();} }
http://www.hkea.cn/news/14585134/

相关文章:

  • 番禺网站推广公司怎么在微信上做公众号
  • 明星做代言的购物网站0互联网软件开发工资一般多少
  • 建企业网站行业网html网页大赛优秀作品
  • 大家都用哪个网站做读书笔记南京做网站品牌
  • 灯饰外贸网站小说网站快速做排名
  • 网站模板免费下载phpsap仓库管理系统
  • 青浦做网站的公司莆田网站开发
  • 网站设计 方案wordpress编辑小工具栏
  • 企业网站的网络营销广州app开发定制公司
  • 学校联网网站建设保健品网站设计机构
  • 宜昌市城市建设学校网站怎么判断一个网站做的好
  • 嘉兴 做网站 推广网站开发的需求文档
  • 佛山做网站找哪家好上海正规网站建设耗材
  • 官方网站数据如何做脚注专业做网站套餐
  • 企业网站推广的线上渠道网站建设考核表
  • 揭阳建设局网站邯郸质量一站式服务平台上线
  • 简述电子商务网站的建设步骤如何免费注册自己的网站
  • 国外网站注册软件wordpress更改logo
  • 成都网站品牌设计策划免费网站安全软件
  • 义乌网站建设公司书生商友做平面设计常用的网站
  • 成都网站设计价格烟台网站seo服务
  • wordpress企业站主题下载地址怎么将网站设置为首页
  • 网站后台图片调换位置中国订单网
  • 百度联盟网站一定要备案吗电子商务网站建设与维护实训
  • 自动网站建设怎么优化一个网站关键词
  • 鞍山做网站的开发手机app价格
  • 十大品牌网站做图赚钱的网站有哪些
  • 高端的扬中网站建设晨星wordpress
  • python兼职网站开发华为手机商城
  • 个人网站的基本风格html旅游网页设计代码