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

二十四、Gtk4-GtkExpression

GtkExpression是一种基本类型。它不是GObject的后代。GtkExpression提供了一种描述对值的引用的方法。GtkExpression需要求值才能获得值。

它类似于算术计算。

1 + 2 = 3

1+2是一个表达式。给出了计算的方法。3是来自表达式的值。求值是计算表达式并得到值。

GtkExpression是一种获取值的方法。Evaluation类似于计算。值是通过计算表达式得到的。

Constant expression

常量表达式(GtkConstantExpression)在求值时提供常量值或实例。

  GValue value = G_VALUE_INIT;expression = gtk_constant_expression_new (G_TYPE_INT,100);gtk_expression_evaluate (expression, NULL, &value);
  • GtkExpression使用GValue来保存一个值。GValue是一个保存类型和值的结构体和容器。它必须首先用G_VALUE_INIT初始化。注意,value是结构体,而不是指向结构体的指针。
  • 常量表达式用gtk_constant_expression_new函数创建。函数的参数是一个类型(GType)和一个值(或实例)。这个表达式保存一个常量值。G_TYPE_INT是注册到类型系统的类型。整数类型。下表列出了一些类型。
  • gtk_expression_evaluate计算表达式的值。它有三个参数:要求值的表达式、这个实例和一个指向GValue的指针。对于常量表达式来说,这个实例不是必需的。因此,第二个参数是NULL。如果成功计算表达式,gtk_expression_evaluate返回TRUE。否则返回FALSE。
  • 如果返回TRUE,则用表达式的值设置GValue的值。值的类型是int。

请添加图片描述
src/expression目录下有一个示例程序exp_constant_simple.c。

  • 9 .创建常量表达式。它保存一个int值100。变量表达式指向表达式。
  • 11-14:对表达式求值。如果成功,将值显示给stdout。否则显示错误消息。
  • 15-16:释放表达式并取消设置GValue。

常量表达式通常用于将常量值或实例赋给另一个表达式。

Property expression

属性表达式(GtkPropertyExpression)在GObject实例中查找属性。例如,引用GtkLabel对象中的“label”属性的属性表达式是这样创建的。

expression = gtk_property_expression_new (GTK_TYPE_LABEL, another_expression, "label");

第二个形参another_expression是:

  • 在求值时给出GtkLabel实例的表达式。
  • NULL.当给定NULL时,求值时会给出一个GtkLabel实例。这个实例被称为这个对象。

例如,

label = gtk_label_new ("Hello");
another_expression = gtk_constant_expression_new (GTK_TYPE_LABEL, label);
expression = gtk_property_expression_new (GTK_TYPE_LABEL, another_expression, "label");

如果expression被求值,第二个参数another_expression会被提前求值。another_expression的值是标签(GtkLabel实例)。然后,expression查找标签的"label"属性和求值结果"Hello"。

在上面的例子中,gtk_property_expression_new的第二个参数是另一个表达式。但是第二个参数可以是NULL。如果为NULL,则使用这个实例。这由gtk_expression_evaluate函数给出。

在src/expression目录下有一个简单的程序exp_property_simple.c。

 1 #include <gtk/gtk.h>2 3 int4 main (int argc, char **argv) {5   GtkWidget *label;6   GtkExpression *expression;7   GValue value = G_VALUE_INIT;8 9   gtk_init ();
10   label = gtk_label_new ("Hello world.");
11   /* Create an expression */
12   expression = gtk_property_expression_new (GTK_TYPE_LABEL, NULL, "label");
13   /* Evaluate the expression */
14   if (gtk_expression_evaluate (expression, label, &value))
15     g_print ("The value is %s.\n", g_value_get_string (&value));
16   else
17     g_print ("The constant expression wasn't evaluated correctly.\n");
18   gtk_expression_unref (expression);
19   g_value_unset (&value);
20 
21   return 0;
22 }
  • 9-10: gtk_init初始化GTK GUI工具包。这通常是不必要的,因为GtkApplication默认的启动处理程序会进行初始化。一个GtkLabel实例被创建为"Hello world."。
  • 12:创建属性表达式。它看起来像一个GtkLabel实例的“label”属性。但在创建时,没有给出实例,因为第二个参数是NULL。该表达式只知道如何从给定future的GtkLabel实例中获取属性。
  • 14-17:函数gtk_expression_evaluate使用this实例标签来计算表达式。结果保存在GValue值中。函数g_value_get_string从GValue中获取一个字符串。但是字符串属于GValue,所以不能释放字符串。
  • 18-19:释放表达式并取消设置GValue。与此同时,GValue中的字符串被释放。

如果gtk_property_expression_new的第二个参数不是NULL,那么它就是另一个表达式。该表达式由新创建的属性表达式拥有。所以,当表达式无用时,你只需释放最后一个表达式。然后释放它拥有的另一个表达式。

Clousure expression

闭包表达式在计算闭包时调用闭包。闭包是回调函数(一个指向函数的指针)的通用表示。有关闭包的信息,请参阅GObject API参考——GObject消息系统。在src/expression目录下有一些简单的闭包示例文件closure.c和closure_each.c。

有两种闭包表达式,GtkCClosureExpression 和GtkClosureExpression。它们分别对应于GCClosure和GClosure。当你用C语言编程时,GtkCClosureExpression和GCClosure是合适的。

闭包表达式是用gtk_closure_expression_new函数创建的。

GtkExpression *
gtk_cclosure_expression_new (GType value_type,GClosureMarshal marshal,guint n_params,GtkExpression **params,GCallback callback_func,gpointer user_data,GClosureNotify user_destroy);
  • value_type是求值时值的类型。
  • marshal就是marshaller。你可以赋值NULL。如果它是NULL,那么g_cclosure_marshal_generic()被用作marshaller。它是一个通过libffi实现的通用marshaller函数。
  • n_params是参数的数目。
  • params指出了回调函数中每个参数的表达式。
  • callback_func是一个回调函数。它被给出了这个参数和上面的参数。因此,如果n_params为3,则函数的参数数量为4。(this和params。见下文)。
  • user_data是用户数据。你可以把它添加到闭包中。它类似于g_signal_connect中的user_data。如果没有必要,则赋值NULL。
  • user_destroy是user_data的销毁通知。在不再需要user_data时,调用该函数销毁它。如果将NULL赋值给user_data,也将NULL赋值给user_destroy。

回调函数的格式如下。

C-type
callback (this, param1, param2, …)

int
callback (GObject *object, int x, const char *s)
  • 3-11:回调函数。这个参数只有一个,而且是一个this对象。它是一个GtkLabel,其标签被假定为"(number)+(number)"。
  • 8-10:从标签中检索两个整数,并返回它们的和。此函数没有错误报告。如果要返回错误报告,将返回值类型更改为指向gboolean和integer结构的指针。一个表示误差,另一个表示求和。gtk_cclosure_expression_new的第一个参数是G_TYPE_POINTER。在src/expression目录下有一个示例程序exp_closure_with_error_report。
  • 19: gtk_init初始化GTK。这对于GtkLabel是必要的。
  • 20:创建一个“123+456”的GtkLabel实例。
  • 21:实例具有浮动引用。它变成了一个普通的引用计数。
  • 22-23:创建闭包表达式。它的返回值类型是G_TYPE_INT,没 有参数或“this”对象。
  • 24:将标签作为this对象来计算表达式。
  • 25:如果计算成功,显示“123+456”的和。它是579。
  • 27:如果失败,显示错误信息。
  • 28-30:释放expression和标签。重置该值。

闭包表达式比其他类型的表达式更灵活,因为你可以指定自己的回调函数。

GtkExpressionWatch

GtkExpressionWatch是一个结构体,而不是对象。它表示一个被监视的gtk表达式。两个函数创建了GtkExpressionWatch结构。

gtk_expression_bind function

这个函数将目标对象的属性绑定到表达式上。如果表达式的值改变了,属性会立即反映这个值。

GtkExpressionWatch*
gtk_expression_bind (GtkExpression* self,GObject* target,const char* property,GObject* this_
)

这个函数接受表达式的所有权。因此,如果你想拥有表达式,可以调用gtk_expression_ref()来增加表达式的引用计数。当它没用的时候,你应该取消引用。如果你不拥有这个表达式,你就不在乎释放这个表达式。
在这里插入图片描述

一个exp_bind.c和exp_bind的例子。UI位于src/expression目录中。

它包括一个label和一个scale。如果向右移动滑块,scale值会增加,标签上的数字也会增加。同样地,如果向左移动,标签上的数字就会减少。标签通过调整绑定到scale值上。

 1 <?xml version='1.0' encoding='UTF-8'?>2 <interface>3   <object class='GtkApplicationWindow' id='win'>4     <property name='default-width'>600</property>5     <child>6       <object class='GtkBox'>7         <property name='orientation'>GTK_ORIENTATION_VERTICAL</property>8         <child>9           <object class='GtkLabel' id='label'>
10             <property name="label">10</property>
11           </object>
12         </child>
13         <child>
14           <object class='GtkScale'>
15             <property name='adjustment'>
16               <object class='GtkAdjustment' id='adjustment'>
17                 <property name='upper'>20.0</property>
18                 <property name='lower'>0.0</property>
19                 <property name='value'>10.0</property>
20                 <property name='step-increment'>1.0</property>
21                 <property name='page-increment'>5.0</property>
22                 <property name='page-size'>0.0</property>
23               </object>
24             </property>
25             <property name='digits'>0</property>
26             <property name='draw-value'>true</property>
27             <property name='has-origin'>true</property>
28             <property name='round-digits'>0</property>
29           </object>
30         </child>
31       </object>
32     </child>
33   </object>
34 </interface>

ui文件描述了以下父子关系。

GtkApplicationWindow (win) -- GtkBox -+- GtkLabel (label)+- GtkScale

定义了4个GtkScale属性。

  • adjustment。GtkAdjustment提供如下功能。
    • upper and lower:scle的范围。
    • value:scale的当前值。它反映了scale的当前值。
    • step increment and page increment:当用户按箭头键或页面上/下键时,缩放比例分别以 step increment和page increment的方式移动。
    • page-size:当与比例一起使用时,page-size为0。
  • digits:数值中显示的小数位数。
  • draw-value:值是否显示。
  • has-origin:标尺是否有原点。如果它为真,则在原点和当前点之间出现橙色条。
  • round-digits:数值发生变化时舍入的位数。例如,如果它为0,则滑块移动到一个整数点。
 1 #include <gtk/gtk.h>
2 
3 GtkExpressionWatch *watch;
4 
5 static int
6 f2i (GObject *object, double d) {
7   return (int) d;
8 }
9 
10 static int
11 close_request_cb (GtkWindow *win) {
12   gtk_expression_watch_unwatch (watch);
13   return false;
14 }
15 
16 static void
17 app_activate (GApplication *application) {
18   GtkApplication *app = GTK_APPLICATION (application);
19   gtk_window_present (gtk_application_get_active_window(app));
20 }
21 
22 static void
23 app_startup (GApplication *application) {
24   GtkApplication *app = GTK_APPLICATION (application);
25   GtkBuilder *build;
26   GtkWidget *win, *label;
27   GtkAdjustment *adjustment;
28   GtkExpression *expression, *params[1];
29 
30   /* Builds a window with exp.ui resource */
31   build = gtk_builder_new_from_file ("exp_bind.ui");
32   win = GTK_WIDGET (gtk_builder_get_object (build, "win"));
33   label = GTK_WIDGET (gtk_builder_get_object (build, "label"));
34   // scale = GTK_WIDGET (gtk_builder_get_object (build, "scale"));
35   adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (build, "adjustment"));
36   gtk_window_set_application (GTK_WINDOW (win), app);
37   g_signal_connect (win, "close-request", G_CALLBACK (close_request_cb), NULL);
38   g_object_unref (build);
39 
40   /* GtkExpressionWatch */
41   params[0] = gtk_property_expression_new (GTK_TYPE_ADJUSTMENT, NULL, "value");
42   expression = gtk_cclosure_expression_new (G_TYPE_INT, NULL, 1, params, G_CALLBACK (f2i), NULL, NULL);
43   watch = gtk_expression_bind (expression, label, "label", adjustment); /* watch takes the ownership of the expression. */
44 }
45 
46 #define APPLICATION_ID "com.github.ToshioCP.exp_watch"
47 
48 int
49 main (int argc, char **argv) {
50   GtkApplication *app;
51   int stat;
52 
53   app = gtk_application_new (APPLICATION_ID, G_APPLICATION_DEFAULT_FLAGS);
54 
55   g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL);
56   g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
57 
58   stat =g_application_run (G_APPLICATION (app), argc, argv);
59   g_object_unref (app);
60   return stat;
61 }
  • 41-42:定义两个表达式。一个是属性表达式,另一个是闭包表达式。属性表达式查找调整实例的“value”属性。闭包表达式只是将double转换为整数。
  • 43: gtk_expression_bind将GtkLabel实例的label属性绑定到闭包表达式返回的整数上。它创建了一个GtkExpressionWatch结构。绑定在watch生命周期内工作。当窗口被销毁时,scale和adjustment也被破坏。watch识别出expression变化的value,并试图改变标签的属性。显然,这不是正确的行为。在窗户被破坏之前,watch应该无人看管。
  • 37:将窗口上的“关闭请求”信号连接到处理程序close_request_cb。这个信号在单击关闭按钮时发出。处理程序在窗口关闭前被调用。现在正是让GtkExpressionWatch无人观看的好时机。
  • 10-14:“close-request”信号处理程序。Gtk_expression_watch_unwatch (watch)使手表停止观察表达式。它释放表达式并在其中调用gtk_expression_watch_unref (watch)。

如果您想将属性绑定到表达式,gtk_expression_bind是最佳选择。你可以用gtk_expression_watch函数来实现,但它不太适合。

gtk_expression_watch function

Gtkexpression in ui files

Conversion between GValues

相关文章:

二十四、Gtk4-GtkExpression

GtkExpression是一种基本类型。它不是GObject的后代。GtkExpression提供了一种描述对值的引用的方法。GtkExpression需要求值才能获得值。 它类似于算术计算。 1 2 3 12是一个表达式。给出了计算的方法。3是来自表达式的值。求值是计算表达式并得到值。 GtkExpression是一种…...

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(02)—— Oracle RAC 主库的相关操作

Oracle Dataguard&#xff08;主库为 Oracle rac 集群&#xff09;配置教程&#xff08;02&#xff09;—— Oracle RAC 主库的相关操作 / 本专栏详细讲解 Oracle Dataguard&#xff08;Oracle 版本为11g&#xff0c;主库为双节点 Oracle rac 集群&#xff09;的配置过程。主要…...

midjournery AI绘画使用指南

midjournery AI绘画使用指南 基于Discord的Midjournery配置&#xff1a; https://www.bilibili.com/video/BV16d4y1A7Zq/?spm_id_from333.337.search-card.all.click&vd_source9c3ca9555620bed64bdee27ae49d37cf 使用原则 使用midjournery绘画的原则是给出对脑海中某个…...

iptables防火墙SNAT和DNAT

iptables防火墙SNAT和DNAT一、SNAT原理和应用1、SNAT原理2、SNAT应用环境3、SNAT转换前提条件二、SNAT案列1、实验需求2、实验环境3、实验目的三、DNAT原理和应用1、DNAT原理2、DNAT 应用环境3、DNAT转换的前提条件四、DNAT案列总结一、SNAT原理和应用 1、SNAT原理 SNAT原理:…...

python | 第二章考试题和练习题

一、考试题 1、turtle八边形绘制 问题描述&#xff1a; 使用turtle库&#xff0c;绘制一个八边形。 参考代码&#xff1a; import turtle as t t.pensize(2) for i in range(8):t.fd(100)t.left(45) 2、turtle八角图形绘制 问题描述&#xff1a; 使用turtle库&#xff0c;…...

Mysql 存储引擎设计:xa协议相关接口功能及实现

需要对接的接口以及每个接口的实现 recovery 阶段 此阶段由 xa.cc 文件中的 xarecover_handlerton() 函数完成&#xff0c;它通过三个接口实现与存储引擎的沟通&#xff1a;recover()&#xff0c;commit_by_xid() &#xff0c;rollback_by_xid()。其流程如下&#xff1a; 此…...

字符串常量池

1.创建对象的思考下面两种创建字符串的方式一样吗&#xff1f;public static void main(String[] args) {//两者一样吗String s1 "hello";String s2 "hello";String s3 new String("hello");String s4 new String("hello");System…...

让技术更有温度,腾讯Light 点亮公益之光

蓝天白云&#xff0c;远处是广东最长跨海大桥——南澳大桥&#xff0c;一艘小船在海面驶过&#xff0c;近处一头中华白海豚露出水面。在第三届腾讯Light技术公益创造营上&#xff0c;海南智渔可持续发展研究中心科学总监郑锐强为我们展现这样一幅人与自然和平相处的美好画面。随…...

电子采购一体化解决方案

企事业数字化转型专家&#xff0c;提供各类应用解决方案。您身边的赋能小助手&#xff01; 文章目录前言一、当下采购的痛点二、解决方案-供应商管理1.供应商管理三、解决方案-企业询价、供应商报价管理四、解决方案-采购订单五、送货、到货、订单管理总结前言 随着各类产业链…...

SAP COPA 获利能力分析深度解析

一、获利分析配置及相关值概述 二、配置&#xff1a;组织结构 2.1 定义经营范围-KEP8 2.2 维护经营关注点-KEA0 2.3 获利能力分析类型解析 2.4 控制范围分配给经营范围-KEKK 三、配置&#xff1a;数据结构-KEA0 3.1 特征字段 3.1.1 特征字段类别 3.1.2 维护特征字段-K…...

Java学习记录day6

书接上回 类与对象 static关键字 static的作用&#xff1a; 修饰一个属性&#xff1a;声明为static的变量实质上就是一个全局变量,其生命周期为从类被加载开始一直到程序结束&#xff1b;修饰方法&#xff1a;无须本类的对象也可以调用该方法&#xff1b;修饰一个类&#x…...

ubuntu 使用 adb 工具卸载鸿蒙系统预装软件

准备工作 打开 USB 调试 进入 “设置->关于手机” 连续点击版本号, 直到有提示开启了"开发人员选项" 进入 “设置->系统和更新->开发人员选项”, 打开 USB 调式, 顺便可以把"自动系统更新"关了 下载 adb 工具 官方地址: https://developer.an…...

Jmeter in Linux - 在Linux系统使用Jmeter的坑

Jmeter in Linux - 在Linux系统使用Jmeter的坑Jmeter in Linux系列目录&#xff1a;o.a.j.JMeter: Error in NonGUIDriver起因错误分析&#xff1a;解决方案&#xff1a;解析日志没有展示请求和响应信息起因解决方案&#xff1a;注意Jmeter in Linux系列目录&#xff1a; 【如…...

什么是特权访问管理(PAM)

特权访问管理 &#xff08;PAM&#xff09; 是指一组 IT 安全管理原则&#xff0c;可帮助企业隔离和管理特权访问、管理特权帐户和凭据、控制谁可以获得对哪些端点的管理访问权限级别&#xff0c;并监视用户对该访问权限执行的操作。 什么是特权访问 特权访问是一种 IT 系统访…...

LeetCode题目笔记——1.两数之和

文章目录题目描述题目难度——简单方法一&#xff1a;暴力代码/Python方法二&#xff1a;哈希表代码/Python代码/C总结题目描述 这道题可以说是力扣的入坑题了&#xff0c;很经典&#xff0c;好像还是面试的经典题。 给定一个整数数组 nums 和一个整数目标值 target&#xff0c…...

CSDN版的详细MarkDown的使用教程

MarkDown的使用欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释…...

Nextcloud通过不被信任的域名访问解决方法 Nextcloud 您正在访问来自不信任域名的服务器

windows电脑在网页端输入“http://192.168.xxx.xxx:8080/login”访问远程ubuntu18.04服务器&#xff0c;访问其docker镜像的Nextcloud&#xff0c;提示“”Nextcloud通过不被信任的域名访问解决方法 Nextcloud 您正在访问来自不信任域名的服务器“”&#xff0c;如下图&#xf…...

Set集合的特点,HashSet去重的几个重要问题

Set集合的特点&#xff1a;无下标&#xff0c;无序(新增顺序和遍历顺序不一致&#xff0c;新增顺序不影响遍历顺序&#xff0c;而且有一个固定顺序)&#xff0c;去重(不允许重复记录)public class TestOne {public static void main(String[] args) {// Set集合的特点&#xff…...

云计算|OpenStack|社区版OpenStack安装部署文档(十一--- 如何获取镜像---Rocky版)

前言&#xff1a; 前面我们使用虚拟机搭建了一个openstack集群&#xff0c;也就是在VM虚拟机的基础上模拟了一个简单的基于openstack社区版Rocky的私有云&#xff0c;但&#xff0c;不管任何部署安装工作&#xff0c;最后其实都是需要有实际的应用的&#xff0c;也就是常说的实…...

UmiJS学习

UmiJS4学习笔记起步官网学习&#xff1a;https://umijs.org/开发环境Umi.js 需要使用 Node.js来进行开发&#xff0c;因此请先确保电脑已经安装了 Node.js 且版本在 14 以上。安装pnpm&#xff1a;npm install pnpm -g创建项目Umi 官方提供了一个脚手架 &#xff0c;可以轻松快…...

Leetcode:322. 零钱兑换(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 动态规划&#xff08;完全背包&#xff09;&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金…...

C经典小游戏之扫雷

编译环境&#xff1a;VS022 目录 1.算法思路 2.代码模块 2.1 game.h 2.2 game.cpp 2.3 test.cpp 3.重点分析 4.金句省身 1.算法思路 主要采用二维数组进行实现&#xff0c;设置两个二维数组&#xff0c;一个打印结果&#xff0c;即为游戏界面显示的效果&#xff0c;一个用…...

第十节 使用设备树插件实现RGB 灯驱动

Linux4.4 以后引入了动态设备树&#xff08;Dynamic DeviceTree&#xff09;&#xff0c;我们这里翻译为“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中&#xff0c;并被内核识别。例如我们要在系统中增加RGB 驱动&#xff0c;那么我们可以针对R…...

【LeetCode】公交路线 [H](宽度优先遍历)

815. 公交路线 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给你一个数组 routes &#xff0c;表示一系列公交线路&#xff0c;其中每个 routes[i] 表示一条公交线路&#xff0c;第 i 辆公交车将会在上面循环行驶。 例如&#xff0c;路线 routes[0] [1, 5, 7] 表示第 …...

报表生成器 FastReport .Net 用户指南 2023(十):Band的属性

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…...

DAMA数据管理知识体系指南之文档和内容管理

第10章 文档和内容管理 10.1 简介 文档和内容管理是对存储在关系数据库以外的信息的采集、存储、访问以及使用的控制活动。文档和内容管理的侧重点在完整性和访问控制上。因此&#xff0c;它与关系数据库的数据操作管理大致相同。由于多数非结构化数据与存储在结构化文件中的…...

C++入门:数据结构

C/C 数组允许定义可存储相同类型数据项的变量&#xff0c;但是结构是 C 中另一种用户自定义的可用的数据类型&#xff0c;它允许您存储不同类型的数据项。结构用于表示一条记录&#xff0c;假设您想要跟踪图书馆中书本的动态&#xff0c;您可能需要跟踪每本书的下列属性&#x…...

C语言实现烟花表白,内含源码!!

虽然现在看烟花有一定难度&#xff0c;但代码式烟花可以随时随地看&#xff01; 烟花的代码很多&#xff0c;实际上是可以用 Python、HTML5 等语言写烟花&#xff0c;但今天主要想和大家分享用C语言写的烟花代码&#xff0c;非常细致和实用。 同学们一定要亲自敲一遍&#xf…...

虚拟机安装CentOS 7(带界面)

目录 一、虚拟机安装CentOS 7&#xff08;带界面&#xff09; 1、打开下好的VMware&#xff0c;点击创建虚拟机 2、下一步 3、点击下一步 4、选择Linux&#xff0c;ContOS7&#xff0c;点击下一步 5、修改虚拟机名称和路径 6、下一步 7、点击自定义硬件 8、设置虚拟机大…...

Java测试——selenium具体操作

selenium的前置准备工作可以参考我之前的博客&#xff1a;Java测试——selenium的安装与使用教程 这篇博客讲解一下selenium的常见操作 先创建driver ChromeDriver driver new ChromeDriver();输入网址 driver.get("https://www.baidu.com");常见操作 查找元素…...

dede网站地图位置/关键词排名代发

2019独角兽企业重金招聘Python工程师标准>>> 其实微博是个好东西&#xff0c;关注一些技术博主之后&#xff0c;你不用再逛好多论坛了&#xff0c;因为一些很好的文章微博会告诉你&#xff0c;最近看到酷勤网推荐的一篇文章《30个提 高Web程序执行效率的好经验》&am…...

做网站主要是做什么/搜索引擎优化的基础是什么

在API网关开放API服务后&#xff0c;如何保障服务的稳定性&#xff0c;怎么能够实时监控API的情况&#xff1f;及时处理API服务异常&#xff0c;是API开放者关注的重点。本文将主要介绍API网关提供的API监控报警功能&#xff0c;通过简单的配置&#xff0c;即可帮助您实现API的…...

seo 网站换程序/北京网站制作设计

2019独角兽企业重金招聘Python工程师标准>>> 0.AFN框架基本使用 0.1 AFN内部结构AFN结构体- NSURLConnection AFURLConnectionOperation(已经被废弃) AFHTTPRequestOperation(已经被废弃) AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)(已经被废弃)* 属性…...

网站建设 力洋网络/广州百度关键词推广

场景 使用docker进行前端项目构建时报错&#xff0c;但是本地构建正常。 完整报错信息The build failed because the process exited too early. This probably means the system ran out of memory or someone called kill -9 on the process. 参考过程 从 create-react-ap…...

商业网站导航怎么做/如何进行网站推广

蓝桥杯 分巧克力 python 题目标题 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切…...

如何做照片ppt模板下载网站/定制网站+域名+企业邮箱

2019年5月3日 星期五 补 最后一次&#xff0c;不要再补了&#xff01; 1.RJ-54端口&#xff1a;在这种端口上通过双绞线连接以太网。 10Base-T的RJ-45端口标志为“ETH”&#xff0c;而100Base-TX的RJ-45端口标志为“10/100bTX”&#xff0c;这是因为快速以太网路由器采用10/100…...