甄文超

TNT 数字生活

Technology Technology Category


WPF Prism(四)MVVM

一、前言 在阅读本篇文章之前,最好有ICommand和INotifyPropertyChanged等基础知识。 二、BindableBase BindableBase抽象类实现了INotifyPropertyChanged接口,主要作用当绑定到界面的数据发生改变的时候可以通知界面进行更新。 public class ContentViewModel : BindableBase { private string _message; public string Message { get { return _message; } set { SetProperty(ref _message, value); } } } 三、Command 用于事件 …

.NET wpf

WPF Prism(三)ViewModelLocator

一、命名约定 在Prism当中,你可以基于命名约定,便能够轻松的将View和ViewMode建立关联。前提是你已经为项目创建了Views和ViewModels文件夹(这里就突出了使用模板创建的好处了)。 例如:你的页面为ViewA,那么对应的ViewModel名称为ViewAViewModel。 ​ 你的页面为HeaderView,那么对应的ViewModel名称为HeaderViewModel。 二、允许View自动装配ViewModel <UserControl x:Class="Menu.Views.MenuView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/ …

.NET wpf

WPF Prism(二)Module

一、什么是模块(Module) 本质上来说,对于一个应用程序而言,特定功能的所有View、Logic、Service等都可以独立存在。那么我们称每一个独立的功能我们都可以称之为模块。 通常情况下,我们在一个项目当中的结构是这样的: 所有的模块都在一个项目中,这使得应用程序当中,我们难以区分单独的模块,它们似乎变成了一个整体。所以,当我们开始考虑划分模块之间的关系的时候,并且采用新的模块化解决方案,它的结构将变成如下: 该项目包含了一个启动页,并且在启动页当中,我们划分好了对应的区域。这个时候,我们便可以灵活的配置我们的应用程序功能。使用Prism提供的强大功能,我们可以动态的加载应用程序模块,为指定的Region动态分配内容。 二、创建模块 2.1如果安装了VS插件,则可以直接在Module,它是一个类库。创建好之后是这样的: 2.2查看HeaderModule文件 …

.NET wpf

WPF Prism(一)Region

一、什么是Region 在Prism当中,一个页面我们可以不再为其固定显示的内容,而这种概念变成了区域(Region)划分的概念。将页面显示的区域划分成N个Region,每一个Region将动态分配区域。它将负责承担我们的UI组件或者控件。 二、RegionManager类 RegionManager功能 维护区域集合提供对区域的访问合成视图区域导航定义区域 三、使用RegionManager 首先,我们需要将MainWindow的构造函数传入IRegionManager参数: public partial class MainWindow : Window { public MainWindow(IRegionManager regionManager) { InitializeComponent(); …

.NET wpf

WPF Prism框架介绍

WPF Prism框架介绍 一、什么是PrismPrism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。 二、官方地址 https://github.com/PrismLibrary/Prism 基于Prism的VisualStudio扩展包模板: Prism Template Pack,下载它后可以快速创建基于Prism的项目。 三、Prism框架内容 框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。 四、Prism知识章节 Region(区域管理) Module(模块) View Injection(视图注入) ViewModelLocationProvider(视图模型定位) Command(绑定相关) Eevent Aggregator (事件 …

.NET wpf

Qt 编译错误

1、error: ‘ui_mainwindow.h‘ file not found(ui头文件未创建) 问题:在刚好创建的Qt Designer Form Class类中,发现类的.cpp文件中有ui头文件未找到原因:.ui文件没有被识别到,或者.ui文件不存在,导致ui头文件未创建而报错。解决:若修改了.ui文件,随手ctrl+s保存一下,不行再将工程重新构建或重启Qt,就会生成ui头文件, …

QT

QT生成与解析JSON数据,包含JSON数组

简述 Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument、QJsonArray、QJsonObject),在 QtCore 模块中,不需要额外引入其它模块。 常用的 JSON 库 json.org 中介绍了 JSON 在各种语言中的应用,在 C/C++ 中比较常用的JSON 库主要有以下几个: JsonCpp JsonCpp 是一个 C++ 用来处理 JSON 数据的开发包。 网址:http://jsoncpp.sourceforge.net/ cJSON cJSON 是一个超轻巧,携带方便,单文件,简单的可以作为 ANSI-C 标准的 JSON 解析器。 网址:http://sourceforge.net/projects/cjson/ QJson QJson 是一个基于 Qt 的开发包用来将 JSON 数据解析成 …

QT

Qt 资源文件 qrc

前言 当Qt工程打包好发给他人使用时可能会出现一些图片不显示或者一张图片都加载不出来情况,那么可能就是他人的电脑没有这些图片资源,或者源程序加载图片的方法采用的是绝对路径的写法,与他人电脑上面图片的绝对路径不一致导致加载不出来。 通过Qt添加资源文件的方法就可以解决这个问题,而且项目打包发给别人的时候不需要把图片也一起打包,可以节省很多空间。本文就是介绍Qt如何添加资源文件并使用。 添加资源文件 右键工程文件夹——>点击添加新文件 依次选择Qt——>Qt Resource File——>choose 给资源起个名字,点击下一步,然后点击完成。 先选择添加前缀,然后把前缀改成自己需要的,或者直接用 / …

QT

QLineEdit 编辑框左侧添加小图标

方法 使用action的方法添加图标 //一、新建action QAction* userAction = new QAction(ui-nameEdit); QAction* passwordAction = new QAction(ui-numEdit); //二、给action添加icon userAction-setIcon(QIcon(":/password.png")); passwordAction-setIcon(QIcon(":/num.png")); //三、给空间添加action ui-nameEdit-addAction(userAction,QLineEdit::LeadingPosition); ui-numEdit-addAction(passwordAction, …

QT

qt 移动窗体

一般情况下,当去掉窗体标题栏时,按住鼠标左键就无法实现拖动窗体;当去掉窗体标题栏时,窗体四周的边框也去掉了,此时按住鼠标左键拖动窗体四周边沿,无法实现鼠标拖动改变窗体大小。如下为Qt实现去掉窗体标题栏的代码: setWindowFlag(Qt::FramelessWindowHint); // 去掉标题栏 现在的问题是:   在去掉窗体标题栏的情况下,如何在窗体上按住鼠标左键,实现移动窗体? 2.实现方法 Qt中有个QSizeGrip类,可以很好解决1节提到的问题,关于该类的具体用法,参见Qt Assistant。   代码:   private: //virtual void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; …

QT