WPF 与 C# 开发深度剖析
一、引言
在当今的软件开发领域,Windows 平台依旧占据着重要的地位。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的用户界面(UI)框架,为开发者提供了丰富的功能和灵活的设计方式,能够创建出极具视觉冲击力和交互性的应用程序。C# 作为一种现代、面向对象的编程语言,与 WPF 紧密结合,成为了开发 Windows 应用程序的理想选择。本文将深入探讨 WPF 和 C# 的相关知识,从基础概念到高级应用,为开发者全面介绍如何利用这两者进行高效的应用开发。
二、C# 语言基础
2.1 数据类型与变量
2.1.1 值类型
C# 中的值类型直接存储数据的值,包括整数类型(如byte
、short
、int
、long
)、浮点类型(float
、double
)、布尔类型(bool
)和字符类型(char
)等。例如:
int number = 10;
double price = 9.99;
bool isAvailable = true;
char letter = 'A';
不同的值类型在内存中占用的空间大小不同,开发者需要根据实际需求选择合适的数据类型,以优化内存使用。
2.1.2 引用类型
引用类型存储的是数据的引用,而不是数据本身。常见的引用类型有类(class
)、接口(interface
)、数组(array
)和委托(delegate
)等。例如,定义一个简单的类:
class Person
{public string Name { get; set; }public int Age { get; set; }
}
使用该类创建对象:
Person person = new Person();
person.Name = "John";
person.Age = 30;
2.1.3 变量声明与初始化
在 C# 中,变量必须先声明后使用。声明变量时需要指定数据类型,并且可以选择在声明时进行初始化。例如:
int count; // 声明变量
count = 5; // 初始化变量string message = "Hello, World!"; // 声明并初始化变量
2.2 控制结构
2.2.1 条件语句
条件语句用于根据不同的条件执行不同的代码块。常见的条件语句有if-else
和switch
。
if-else
语句:
int score = 80;
if (score >= 90)
{Console.WriteLine("优秀");
}
else if (score >= 80)
{Console.WriteLine("良好");
}
else if (score >= 60)
{Console.WriteLine("及格");
}
else
{Console.WriteLine("不及格");
}
switch
语句:
int day = 3;
switch (day)
{case 1:Console.WriteLine("星期一");break;case 2:Console.WriteLine("星期二");break;case 3:Console.WriteLine("星期三");break;default:Console.WriteLine("其他");break;
}
2.2.2 循环语句
循环语句用于重复执行一段代码。常见的循环语句有for
、while
和do-while
。
for
循环:
for (int i = 0; i < 5; i++)
{Console.WriteLine(i);
}
while
循环:
int j = 0;
while (j < 5)
{Console.WriteLine(j);j++;
}
do-while
循环:
int k = 0;
do
{Console.WriteLine(k);k++;
} while (k < 5);
2.3 方法与类
2.3.1 方法定义与调用
方法是一段具有特定功能的代码块,可以接收参数并返回值。定义方法的语法如下:
public int Add(int a, int b)
{return a + b;
}
调用方法:
int result = Add(3, 5);
Console.WriteLine(result);
2.3.2 类的概念与使用
类是一种用户自定义的数据类型,它封装了数据和行为。类可以包含字段、属性、方法等成员。例如:
class Rectangle
{private double length;private double width;public Rectangle(double length, double width){this.length = length;this.width = width;}public double Area(){return length * width;}
}
使用类创建对象并调用方法:
Rectangle rect = new Rectangle(5, 3);
double area = rect.Area();
Console.WriteLine(area);
2.4 继承与多态
2.4.1 继承
继承是面向对象编程的重要特性之一,它允许一个类继承另一个类的属性和方法。被继承的类称为基类(父类),继承的类称为派生类(子类)。例如:
class Animal
{public void Eat(){Console.WriteLine("动物吃东西");}
}class Dog : Animal
{public void Bark(){Console.WriteLine("狗叫");}
}
使用派生类:
Dog dog = new Dog();
dog.Eat();
dog.Bark();
2.4.2 多态
多态允许不同的对象对同一消息做出不同的响应。在 C# 中,多态可以通过方法重写和接口实现。例如,使用方法重写实现多态:
class Shape
{public virtual void Draw(){Console.WriteLine("绘制形状");}
}class Circle : Shape
{public override void Draw(){Console.WriteLine("绘制圆形");}
}class Square : Shape
{public override void Draw(){Console.WriteLine("绘制正方形");}
}
使用多态:
Shape[] shapes = { new Circle(), new Square() };
foreach (Shape shape in shapes)
{shape.Draw();
}
三、WPF 基础概念
3.1 WPF 概述
WPF 是微软为 Windows 平台开发的下一代用户界面框架,它引入了全新的图形渲染引擎,支持硬件加速,能够创建出高质量的 2D 和 3D 图形界面。WPF 使用 XAML(可扩展应用程序标记语言)来描述用户界面,使得界面设计和代码逻辑分离,提高了开发效率和可维护性。
3.2 XAML 基础
3.2.1 XAML 语法
XAML 是一种基于 XML 的标记语言,用于定义 WPF 应用程序的用户界面。XAML 的基本语法与 XML 类似,使用标签来表示控件和元素。例如,创建一个简单的窗口:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="My Window" Height="350" Width="525"><Grid><Button Content="Click Me" HorizontalAlignment="Left" Margin="100,100,0,0" VerticalAlignment="Top"/></Grid>
</Window>
3.2.2 控件使用
WPF 提供了丰富的控件,如按钮(Button
)、文本框(TextBox
)、标签(Label
)等。可以在 XAML 中直接使用这些控件来构建界面。例如:
<StackPanel><Label Content="请输入姓名:"/><TextBox Name="txtName"/><Button Content="提交" Click="Button_Click"/>
</StackPanel>
在代码隐藏文件中处理按钮点击事件:
private void Button_Click(object sender, RoutedEventArgs e)
{string name = txtName.Text;MessageBox.Show($"你输入的姓名是:{name}");
}
3.3 布局管理
3.3.1 布局控件
WPF 提供了多种布局控件,用于管理界面中控件的排列和大小。常见的布局控件有Grid
、StackPanel
、WrapPanel
等。
Grid
:将界面划分为行和列的网格,控件可以放置在指定的单元格中。例如:
<Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="100"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Label Content="用户名:" Grid.Row="0" Grid.Column="0"/><TextBox Grid.Row="0" Grid.Column="1"/><Label Content="密码:" Grid.Row="1" Grid.Column="0"/><PasswordBox Grid.Row="1" Grid.Column="1"/>
</Grid>
StackPanel
:按顺序排列子控件,可以是水平排列或垂直排列。例如:
<StackPanel Orientation="Horizontal"><Button Content="按钮1"/><Button Content="按钮2"/><Button Content="按钮3"/>
</StackPanel>
WrapPanel
:当子控件超出其宽度或高度时,会自动换行或换列排列。
<WrapPanel><Button Content="按钮1"/><Button Content="按钮2"/><Button Content="按钮3"/><Button Content="按钮4"/><Button Content="按钮5"/>
</WrapPanel>
3.3.2 布局属性
每个布局控件都有一些属性可以用来控制子控件的布局,如Margin
(外边距)、Padding
(内边距)、HorizontalAlignment
(水平对齐方式)和VerticalAlignment
(垂直对齐方式)等。例如:
<Button Content="居中按钮" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20"/>
四、WPF 数据绑定
4.1 数据绑定基础
4.1.1 数据绑定概念
数据绑定是 WPF 的核心特性之一,它允许将 UI 元素的属性与数据源的属性进行关联,当数据源的属性值发生变化时,UI 元素会自动更新;反之,当 UI 元素的属性值发生变化时,数据源的属性也可以得到更新。
4.1.2 简单数据绑定示例
假设有一个Person
类:
public class Person
{public string Name { get; set; }public int Age { get; set; }
}
在 XAML 中进行数据绑定:
<StackPanel><TextBlock Text="{Binding Name}"/><TextBlock Text="{Binding Age}"/>
</StackPanel>
在代码隐藏文件中设置数据上下文:
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();Person person = new Person { Name = "Tom", Age = 25 };DataContext = person;}
}
4.2 数据绑定模式
4.2.1 单向绑定
单向绑定是指数据源的属性值发生变化时,UI 元素会更新,但 UI 元素的变化不会影响数据源。使用Mode=OneWay
来指定单向绑定。例如:
<TextBlock Text="{Binding Name, Mode=OneWay}"/>
4.2.2 双向绑定
双向绑定允许数据源和 UI 元素之间的相互更新。使用Mode=TwoWay
来指定双向绑定。例如:
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
4.2.3 单向到源绑定
单向到源绑定是指 UI 元素的变化会更新数据源,但数据源的变化不会影响 UI 元素。使用Mode=OneWayToSource
来指定单向到源绑定。
4.3 数据模板
4.3.1 数据模板概念
数据模板用于定义如何显示数据源中的数据。可以使用数据模板来定制列表框、组合框等控件中数据的显示方式。
4.3.2 数据模板示例
假设有一个Employee
类:
public class Employee
{public string Name { get; set; }public int EmployeeId { get; set; }
}
在 XAML 中定义数据模板:
<Window.Resources><DataTemplate x:Key="EmployeeTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" Margin="5"/><TextBlock Text="{Binding EmployeeId}" Margin="5"/></StackPanel></DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding Employees}" ItemTemplate="{StaticResource EmployeeTemplate}"/>
在代码隐藏文件中设置数据源:
public partial class MainWindow : Window
{public ObservableCollection<Employee> Employees { get; set; }public MainWindow(){InitializeComponent();Employees = new ObservableCollection<Employee>{new Employee { Name = "Alice", EmployeeId = 1 },new Employee { Name = "Bob", EmployeeId = 2 }};DataContext = this;}
}
五、WPF 样式与模板
5.1 样式基础
5.1.1 样式概念
样式是一组属性值的集合,用于定义控件的外观和行为。可以使用样式来统一应用程序中相同类型控件的外观。
5.1.2 样式定义与使用
在 XAML 中定义样式:
<Window.Resources><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="Foreground" Value="White"/><Setter Property="FontSize" Value="16"/></Style>
</Window.Resources>
<Button Content="Styled Button"/>
5.2 模板基础
5.2.1 模板概念
模板用于定义控件的可视化结构。可以使用模板来完全自定义控件的外观。
5.2.2 模板定义与使用
例如,自定义按钮的模板:
<Window.Resources><Style TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"CornerRadius="5"><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Border></ControlTemplate></Setter.Value></Setter></Style>
</Window.Resources>
<Button Content="Custom Button"/>
5.3 资源管理
5.3.1 资源概念
资源是可以在应用程序中重复使用的对象,如样式、模板、图像等。可以将资源定义在 XAML 的Resources
部分,然后在需要的地方引用。
5.3.2 资源的使用
例如,定义一个颜色资源并在样式中使用:
<Window.Resources><SolidColorBrush x:Key="MyButtonBackground" Color="Green"/><Style TargetType="Button"><Setter Property="Background" Value="{StaticResource MyButtonBackground}"/></Style>
</Window.Resources>
<Button Content="Button with Resource"/>
六、WPF 动画与多媒体
6.1 动画基础
6.1.1 动画概念
动画是通过在一段时间内改变控件的属性值来创建动态效果的技术。WPF 提供了强大的动画支持,包括属性动画、关键帧动画等。
6.1.2 属性动画示例
例如,创建一个按钮的淡入动画:
<Window.Resources><Storyboard x:Key="FadeInStoryboard"><DoubleAnimation Storyboard.TargetProperty="Opacity"From="0" To="1" Duration="0:0:1"/></Storyboard>
</Window.Resources>
<Button Content="Animated Button" Opacity="0"><Button.Triggers><EventTrigger RoutedEvent="Button.Loaded"><BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}"/></EventTrigger></Button.Triggers>
</Button>
6.2 多媒体支持
6.2.1 音频播放
可以使用MediaElement
控件来播放音频文件。例如:
<MediaElement Source="music.mp3" AutoPlay="True"/>
6.2.2 视频播放
同样,MediaElement
控件也可以用于播放视频文件。例如:
<MediaElement Source="video.mp4" Width="640" Height="360"/>
七、WPF 命令与事件
7.1 命令基础
7.1.1 命令概念
命令是一种抽象的操作,它将操作的定义和执行分离。WPF 提供了命令模式,使得代码更加模块化和可维护。
7.1.2 自定义命令示例
定义一个自定义命令:
public class MyCommand : ICommand
{public event EventHandler CanExecuteChanged;public bool CanExecute(object parameter){return true;}public void Execute(object parameter){MessageBox.Show("命令已执行");}
}
在 XAML 中使用自定义命令:
<Button Content="执行命令" Command="{Binding MyCommand}"/>
在代码隐藏文件中设置命令:
public partial class MainWindow : Window
{public MyCommand MyCommand { get; set; }public MainWindow(){InitializeComponent();MyCommand = new MyCommand();DataContext = this;}
}
7.2 事件处理
7.2.1 事件概念
事件是对象之间通信的一种机制,当某个特定的操作发生时,对象会触发相应的事件。在 WPF 中,控件有许多内置的事件,如按钮的Click
事件、文本框的TextChanged
事件等。
7.2.2 事件处理示例
例如,处理按钮的Click
事件:
<Button Content="点击我" Click="Button_Click"/>
在代码隐藏文件中实现事件处理方法:
private void Button_Click(object sender, RoutedEventArgs e)
{MessageBox.Show("按钮被点击了");
}
八、WPF 应用开发实践
8.1 项目创建与配置
8.1.1 创建 WPF 项目
在 Visual Studio 中,可以通过选择 “创建新项目”,然后选择 “WPF 应用程序” 模板来创建一个新的 WPF 项目。
8.1.2 项目配置
可以对项目的属性进行配置,如设置应用程序的图标、启动窗口等。
8.2 界面设计与布局
8.2.1 设计思路
在进行界面设计时,需要考虑用户体验和界面的美观性。可以使用布局控件来合理安排控件的位置和大小。
8.2.2 示例界面设计
例如,设计一个登录界面:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="登录界面" Height="300" Width="400"><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="100"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Label Content="用户名:" Grid.Row="0" Grid.Column="0" Margin="10"/><TextBox Grid.Row="0" Grid.Column="1" Margin="10"/><Label Content="密码:" Grid.Row="1" Grid.Column="0" Margin="10"/><PasswordBox Grid.Row="1" Grid.Column="1" Margin="10"/><Button Content="登录" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="10"/></Grid>
</Window>
8.3 功能实现与测试
8.3.1 功能实现
根据应用程序的需求,实现相应的功能。例如,在登录界面中实现登录验证功能:
private void Button_Click(object sender, RoutedEventArgs e)
{string username = txtUsername.Text;string password = txtPassword.Password;if (username == "admin" && password == "123456"){MessageBox.Show("登录成功");}else{MessageBox.Show("用户名或密码错误");}
}
8.3.2 测试
在开发过程中,需要对应用程序进行测试,确保其功能正常。可以使用单元测试框架来进行单元测试,也可以进行手动测试。
九、WPF 高级特性
9.1 依赖属性
9.1.1 依赖属性概念
依赖属性是 WPF 中一种特殊的属性,它可以从父元素继承值,支持样式、数据绑定和动画等功能。
9.1.2 依赖属性定义与使用
例如,定义一个自定义依赖属性:
public class MyUserControl : UserControl
{public static readonly DependencyProperty MyPropertyProperty =DependencyProperty.Register("MyProperty", typeof(string), typeof(MyUserControl),new FrameworkPropertyMetadata("Default value"));public string MyProperty{get { return (string)GetValue(MyPropertyProperty); }set { SetValue(MyPropertyProperty, value); }}
}
在 XAML 中使用自定义依赖属性:
<local:MyUserControl MyProperty="Custom value"/>
9.2 路由事件
9.2.1 路由事件概念
路由事件是 WPF 中的一种特殊事件,它可以在可视化树中向上或向下传播。
9.2.2 路由事件示例
例如,自定义一个路由事件:
public class MyControl : Control
{public static readonly RoutedEvent MyEvent =EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble,typeof(RoutedEventHandler), typeof(MyControl));public event RoutedEventHandler MyEvent{add { AddHandler(MyEvent, value); }remove { RemoveHandler(MyEvent, value); }}public void RaiseMyEvent(){RoutedEventArgs newEventArgs = new RoutedEventArgs(MyControl.MyEvent);RaiseEvent(newEventArgs);}
}
在 XAML 中处理自定义路由事件:
<local:MyControl MyEvent="MyControl_MyEvent"/>
在代码隐藏文件中实现事件处理方法:
private void MyControl_MyEvent(object sender, RoutedEventArgs e)
{MessageBox.Show("自定义路由事件被触发");
}
9.3 3D 图形与可视化
9.3.1 3D 图形基础
WPF 支持 3D 图形的创建和渲染。可以使用Viewport3D
控件来创建 3D 场景,使用GeometryModel3D
、MeshGeometry3D
等类来定义 3D 模型。
9.3.2 3D 图形示例
例如,创建一个简单的 3D 立方体:
<Viewport3D><Viewport3D.Camera><PerspectiveCamera Position="0, 0, 5" LookDirection="0, 0, -1" UpDirection="0, 1, 0"/></Viewport3D.Camera><ModelVisual3D><ModelVisual3D.Content><DirectionalLight Color="White" Direction="-1, -1, -1"/></ModelVisual3D.Content></ModelVisual3D><ModelVisual3D><ModelVisual3D.Content><GeometryModel3D><GeometryModel3D.Geometry><MeshGeometry3D Positions="-1,-1,-1 1,-1,-1 1,1,-1 -1,1,-1 -1,-1,1 1,-1,1 1,1,1 -1,1,1"TriangleIndices="0 1 2 2 3 0 1 5 6 6 2 1 5 4 7 7 6 5 4 0 3 3 7 4 3 2 6 6 7 3 4 5 1 1 0 4"/></GeometryModel3D.Geometry><GeometryModel3D.Material><DiffuseMaterial Brush="Blue"/></GeometryModel3D.Material></GeometryModel3D></ModelVisual3D.Content></ModelVisual3D>
</Viewport3D>
十、总结与展望
10.1 总结
本文全面介绍了 WPF 和 C# 的基础知识,从 C# 的数据类型、控制结构、方法和类,到 WPF 的 XAML 基础、布局管理、数据绑定、样式模板、动画多媒体、命令事件等方面进行了详细阐述。同时,还通过实践案例展示了如何使用 WPF 和 C# 进行应用开发,并介绍了 WPF 的一些高级特性。掌握这些知识和技能,开发者可以创建出功能强大、界面美观的 Windows 应用程序。
10.2 展望
随着技术的不断发展,WPF 和 C# 也在不断更新和完善。未来,WPF 可能会在性能优化、跨平台支持等方面取得更大的进展。同时,结合人工智能、大数据等技术,WPF 应用程序可以实现更加智能化和个性化的功能。开发者需要不断学习和探索,跟上技术的发展步伐,以开发出更加优秀的应用程序。
相关文章:
WPF 与 C# 开发深度剖析
一、引言 在当今的软件开发领域,Windows 平台依旧占据着重要的地位。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的用户界面(UI)框架,为开发者提供了丰富的功能和灵活的设计方式&…...
【工具使用-编译器】VScode(Ubuntu)使用
1. VScode的快捷键 快捷键功能说明Ctrl+Shift+P / F1显示命令面板Ctrl+P快速打开文件Ctrl+Shift+N新建窗口Ctrl+Shift+W关闭窗口Ctrl+,打开设置Ctrl+K Ctrl+S打开快捷键设置Ctrl+X剪切行(无选中时剪切整行)Ctrl+C复制行(无选中时复制整行)Alt+↑ / Alt+↓向上/向下移动行Sh…...
C# SerialPort 使用详解
总目录 前言 在工业控制、物联网、嵌入式开发等领域,串口通信(Serial Port Communication)是连接串行设备(如条码扫描器、GPS接收器等)与计算机的重要手段。C# 提供了内置的 SerialPort 类,简化了串口开发…...
数据结构--二叉排序树
一、二叉排序树的定义 二叉排序树,又称二叉查找树。 性质: 左子树结点值<根结点值<右子树结点值(进行中序遍历,可以得到一个递增的有序序列) 二、查找操作 利用二叉排序树的性质,如果树空,…...
FPGA的直方图均衡
文章目录 一、直方图均衡二、代码实现三、仿真 一、直方图均衡 直方图均衡(Histogram Equalization)是一种用于增强图像对比度的图像处理技术。它通过重新分配图像像素的灰度值,使得图像的灰度直方图在整个灰度范围内均匀分布,从而…...
使用Python将视频转化为gif
使用Python将视频转化为gif 一、前言二、准备三、测试 一、前言 最近想把喜欢的视频片段作成gif,就试着用Python做了下,感觉效果还行,这里做个记录。 二、准备 先下载安装对应的库,命令如下: pip install moviepy …...
基于javaweb的SpringBoot雪具商城系统设计与实现系统(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、…...
Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南
实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段,私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目,成功实现Docker Registry至Ha…...
redis--JavaSpring客户端
目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合,看看再spring项目中,redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异,但是差异并不大…...
JavaWeb3
聚合函数:把某一列的数据计算。count,max,min,avg,sum select count(id) from wife;-- 统计个数,不计算null,统计常量表示个数 select count(*) from wife; select min(id) from wife; select avg(age) from wife; 分组查询 select name,c…...
SAP-ABAP:SAP数据集成全场景技术指南(BAPI、RFC、IDOC、BATCHJOB、ODATA、WEBSERVICE):从实时交互到批量处理
SAP数据集成全场景技术指南:从实时交互到批量处理 #mermaid-svg-hpPMerJYUerla0BJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hpPMerJYUerla0BJ .error-icon{fill:#552222;}#mermaid-svg-hpPMerJYUerla0BJ .er…...
QT笔记----QCheckBox
文章目录 概要1、QCheckBox 的基本概念2、单个QCheckBox3、多个QCheckBox同时应用3.1、实现效果3.2、实现Demo 概要 在 Qt 应用程序开发中,QCheckBox 是一个常用的用户界面元素,它允许用户在两种状态(选中和未选中)之间进行切换&a…...
试试智能体工作流,自动化搞定运维故障排查
APO 1.5.0版本全新推出的智能体工作流功能,让运维经验不再零散!只需将日常的运维操作和故障排查经验转化为标准化流程,就能一键复用,效率翻倍,从此告别重复劳动,把时间留给更有价值的创新工作。更贴心的是&…...
3.24[Q]Linux
我正在学习Linux,Linux设备管理是怎样的?详细解释,越细节越好 我正在学习Linux,在Linux设备管理中,什么是char device?以及block,usb device?详细解释,越细节越好 我正在学习Linux࿰…...
深度学习——图像相似度评价指标
这里写目录标题 PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)定义公式代码 SSIMMS-SSIM (Multi Scale Structural Similarity Index Measure,多尺度结构相似性)CSS (Contrast-Structure Similarity 对比结构相似度)MA…...
CentOS安装sshpass工具-自动化SSH密码认证
sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录:sshpass允许用户在命令行中直接传递密码,从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用,因为它可以在非交互式环境下完成…...
js 中 如何获取数组的交集【面试题】
一、数组元素为基本类型:Number、String、等基本类型时 1、使用 Set 和 filter(适用于两个数组) const intersection (arr1, arr2) > {const set new Set(arr2);return [...new Set(arr1)].filter(item > set.has(item)); };将第二…...
value-key 的作用
在 el-autocomplete 组件中,value-key 是一个非常重要的属性,它用于指定选项对象中作为值的字段名。当选项列表是一个包含多个属性的对象数组时,value-key 能帮助组件明确哪个属性是实际要使用的值。比如,选项列表为 [{id: 01, na…...
Spring MVC:从历史演变到实战入门
1. Java Web的发展历史与MVC模式 1.1 Model I与Model II的演进 Model I(JSPJavaBean) 作为早期Java Web开发的主流模式,其核心架构如下: graph LR A[客户端] --> B[JSP页面] B --> C{业务逻辑} C --> D[JavaBean] D -…...
Matlab设置表table的表头
用到matlab的table很好用。经常涉及放入数据,读取数据,下面总结常用的知识点。 1. 把不同数据类型放到同一个表中 想把时间类型和数值类型放到统一table中。困扰的点是,我已经知道了表头名称, 如何批量的为表头命名,…...
预测蓝桥杯16届嵌入式省赛客观题
以下是15道蓝桥杯嵌入式省赛客观题预测,每道题均包含**选项列表**、**答案**和**解析**,格式清晰便于快速查阅: 一、预测1 ### **一、STM32G4硬件基础与外设配置** 1. **STM32G431RBT6的Flash和RAM容量分别为?** **选项**&a…...
综合章节:游戏网络化、模组化与深度扩展
模块一:网络功能与玩家数据同步 目标:实现玩家得分上传、全球排行榜展示及云端数据同步。 # network_manager.py(网络请求封装) import requests import threadingclass NetworkManager:def __init__(self, base_url"http:…...
PostgreSQL:索引与查询优化
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Android Compose 框架的 ViewModel 委托深入剖析(二十)
Android Compose 框架的 ViewModel 委托深入剖析 一、引言 在 Android 开发中,数据的管理和状态的保存是至关重要的。ViewModel 作为 Android 架构组件的一部分,为我们提供了一种在配置更改(如屏幕旋转)时保存数据和管理 UI 状态…...
android|生成二维码qrcode(android)
1.build.gradle implementation com.google.zxing:core:3.4.1引入zxing库 只是生成的话引入core库就可以了 2.封装方法 import android.graphics.Bitmap; import android.graphics.Color;import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; imp…...
element-plus中el-empty空盒子组件和Collapse 折叠面板组件的使用
一.el-empty空盒子组件的使用 直接复制下面的代码: <el-empty description"description" /> 展示效果: 还可以自定义文字描述: <el-empty description"暂未选择患者"/> 二.Collapse 折叠面板组件的使用 复制…...
Windows 和 Linux 操作系统架构对比以及交叉编译
操作系统与架构兼容性详解 1. 可执行文件格式:PE vs ELF Windows: PE (Portable Executable) 格式 详细解释: PE 格式是 Windows 下的可执行文件标准 包含多个区段(Sections),如代码段、数据段、资源段 文件头包含…...
【区块链安全 | 第一篇】密码学原理
文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree(默克尔树)1.4 HMAC(哈希消息认证码) 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC(椭圆曲线密码学)2.4 Diffie-He…...
3.23[A]linux
gedit 是 GNOME 桌面环境下的文本编辑器,类似于 Windows 中的记事本,但功能更强大,支持语法高亮、多文件编辑等特性。它是一个图形化界面的文本编辑器,适合在需要直观编辑文本文件的场景中使用。 gedit 通常用于编辑配置文件、源代…...
AI革命之下的前端将会如何发展?
一、AI 为前端开发带来的变革 (一)提升开发效率 传统的 Web 前端开发常常面临大量重复性工作,如编写简单表单、布局组件等,这些工作耗时费力且易出错,严重影响开发效率和项目进度。而 AI 的出现,通过自动…...
【2025】基于springboot+vue的农产品商城系统设计与实现(源码、万字文档、图文修改、调试答疑)
项目完整功能以演示视频为准 基于Spring Boot Vue的农产品商城系统设计与实现功能结构图如下: 课题背景 随着互联网的普及和电子商务的快速发展,农产品线上销售成为推动农业现代化和乡村振兴的重要力量。传统的农产品销售模式存在信息不对称、销售渠道单…...
沪深300股指期货的看涨看跌方式是怎样的?
沪深300指数代表了中国A股市场中300家大公司的整体表现。股指期货交易允许老板们预测指数未来的涨跌,并从中获利。 沪深300股指期货基础操作 首先,沪深300股指期货中的看涨操作:老板们可以通过买入沪深300股指期货合约,代码也就是…...
使用selenium来获取数据集
使用selenium来获取数据集 1、下载最新的chrome浏览器与chromedriver.exe 查看chrome的版本,打开谷歌浏览器,点击右上角的三个点,然后点击【帮助】, 点击【关于Google Chrome】 然后去下载同样为134版本号的chromedriver.exe, 网址:https://googlechromelabs.github.…...
MCP(大模型上下文协议)
以下是关于大模型MCP协议(Model Context Protocol)的详细介绍,综合其定义、技术架构、应用场景及行业影响: 一、定义与核心目标 **MCP(Model Context Protocol,模型上下文协议)**是由Anthropic…...
FPGA中串行执行方式之流水线(Pipeline)
FPGA中串行执行方式之流水线(Pipeline) 在FPGA设计中,流水线(Pipeline) 是一种常见的优化技术,用于提高系统的吞吐量和性能。流水线通过将复杂的逻辑分解为多个阶段,每个阶段在一个时钟周期内完成一部分工作,并将中间结果传递到下一阶段。这种方式可以显著提高时钟…...
Python 3.8 Requests 爬虫教程(2025最新版)
遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私! 一、环境配置与基础验证 # 验证 Python 版本(需 ≥3.8) import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库(若未安装) # 命令行执…...
【深度学习】GAN生成对抗网络:原理、应用与发展
GAN生成对抗网络:原理、应用与发展 文章目录 GAN生成对抗网络:原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…...
LINUX基础 [三] - 进程创建
目录 前言 进程创建的初次了解(创建进程的原理) 什么是fork函数? 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...
AI比人脑更强,因为被植入思维模型【24】替身决策思维模型
定义 替身决策思维模型是一种在面对复杂问题或决策情境时,通过将自己代入到不同的角色(即“替身”)中,从这些角色的视角出发去思考、分析和做出决策的思维方式。这种思维模型要求决策者暂时摆脱自身固有的思维定式和立场…...
数据清洗:基于python抽取jsonl文件数据字段
基于python抽取目录下所有“jsonl”格式文件。遍历文件内某个字段进行抽取并合并。 import os import json import time from tqdm import tqdm # 需要先安装:pip install tqdmdef process_files():# 设置目录路径dir_path r"D:\daku\关键词识别\1623-00000…...
spring后端处理各种请求
在Spring MVC中处理JSON请求和返回JSON消息的步骤如下: 1. 添加依赖 确保项目中包含处理JSON的库,如Jackson。 Maven配置(pom.xml): <dependency><groupId>com.fasterxml.jackson.core</groupId>…...
企业级部署zabbix分布式监控系统
目录 一、Zabbix分布式监控系统介绍 1.什么是“Zabbix” 2.Zabbix分布式监控系统的特点 3.Zabbix分布式监控系统的原理 4.Zabbix分布式监控系统的运用 5. Zabbix分布式监控系统的部署顺序 二、搭建 1.设备硬件配置参考 2.zabbix分布式监控系统各节点设备名称和IP规划 …...
OkHttp 的证书设置
在 Android 开发中,通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性,防止中间人攻击(如抓包工具 Charles/Fiddler 的拦截)。以下是实现防抓包的关键技术方案: 一、Okhttp设…...
ETL:数据清洗、规范化和聚合的重要性
在当今这个数据呈爆炸式增长的时代,数据已成为企业最为宝贵的资产之一。然而,数据的海量增长也伴随着诸多问题,如数据来源多样、结构复杂以及质量问题等,这些问题严重阻碍了数据的有效处理与深度分析。在此背景下,ETL&…...
蓝桥杯备考:图的遍历
这道题乍一看好像没什么不对的,但是!但是!结点最大可以到10的5次方!!!我们递归的时间复杂度是很高的,我们正常遍历是肯定通过不了的,不信的话我们试一下 #include <iostream>…...
【多媒体交互】Unity Kinect实现UI控件的点击
在Unity中,通过Kinect实现UI控件的点击功能,主要涉及手部追踪、坐标映射和手势检测三个核心环节。 实现步骤 初始化Kinect与关节追踪 使用KinectManager获取用户ID和手部关节点(如JointType.HandLeft)的坐标。 long userId _…...
QinQ项展 VLAN 空间
随着以太网技术在网络中的大量部署,利用 VLAN 对用户进行隔离和标识受到很大限制。因为 IEEE802.1Q 中定义的 VLAN Tag 域只有 12 个比特,仅能表示 4096 个 VLAN,无法满足城域以太网中标识大量用户的需求,于是 QinQ 技术应运而生。…...
OBS虚拟背景深度解析:无需绿幕也能打造专业教学视频(附插件对比)
想要录制教学视频却苦于背景杂乱?本文将手把手教你用OBS实现专业级虚拟背景效果,无需绿幕也能轻松营造沉浸式教学场景。文末附6个提升画面质感的免费背景资源! 一、虚拟背景的核心价值:从「教师宿舍」到「虚拟讲堂」的蜕变 我们调…...
26考研——图(6)
408答疑 文章目录 一、图的基本概念二、图的存储三、图的遍历四、图的应用五、图的代码实操六、参考资料鲍鱼科技课件26王道考研书 七、总结图的存储结构邻接矩阵邻接表 图的遍历图的相关概念完全图和连通图图的连通性 关键路径学习建议 一、图的基本概念 文章链接: link 二、…...
Redis常用数据类型深度解析:从理论到最佳实践
Redis常用数据类型深度解析:从理论到最佳实践 一、引言二、Redis数据类型全景图三、核心数据类型详解**1. String(字符串)****2. Hash(哈希表)****3. List(列表)****4. Set(集合&…...