所需E币: 0
时间: 2023-12-12 15:27
大小: 3.18KB
今天给大家讲解关于Qt的内容,我会在文章里面带着大家从0到1为你系统构建Qt知识体系,然后全流程实战开发项目“云对象存储浏览器”,让大家少走弯路,更快速的掌握Qt技术。那么我们先来认识一下,什么是QT,他的具体作用是什么,应用在哪些方面?Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT之所以能够在全世界范围内得到广大软件开发者的青睐和使用,一个很大的原因是QT入门确实是非常容易。很少的代码就能折腾出一个比较复杂的软件界面。QT已经支持传统模式下的软件界面开发技术体系以及新模式下的软件界面开发技术体系。传统模式比如QTWidgets,这种模式下的竞争对手比如MFC早就“躺平”了表示不再升级更新了。接下来,我们开始代码实战,编写mainwindows.cppMainWindow::MainWindow(QWidget*parent) :QMainWindow(parent) ,ui(newUi::MainWindow){ ui->setupUi(this); //一般在qt的构造函数中进行初始化操作 //显示当前窗口的时候,显示另外一个窗口TestWidget#if1 //创建窗口对象,没有给W对象指定父对象 //要显示这个窗口必须要进行show()操作 TestWidget*w=newTestWidget; w->show();#else //创建窗口对象,给W对象指定父对象 //explicitTestWidget(QWidget*parent=nullptr); //如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口 //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了 //这时候子窗口是没有边框的 TestWidget*w=newTestWidget(this);#endif //创建对话框窗口 Dialog*dlg=newDialog(); //非模态 dlg->show();}#include"mainwindow.h"#include"ui_mainwindow.h"#include"testwidget.h"MainWindow::MainWindow(QWidget*parent) :QMainWindow(parent) ,ui(newUi::MainWindow){ ui->setupUi(this); //一般在qt的构造函数中进行初始化操作 //显示当前窗口的时候,显示另外一个窗口TestWidget //创建窗口对象,没有给W对象指定父对象 TestWidget*w=newTestWidget; w->show();}MainWindow::~MainWindow(){ deleteui;}获取类的属性constQMetaObject*metaobject=object->metaObject();intcount=metaobject->propertyCount();for(inti=0;i<count;++i){ QMetaPropertymetaproperty=metaobject->property(i); constchar*name=metaproperty.name(); QVariantvalue=object->property(name); qDebug()<<name<<value;}在common中引入的坐标依赖<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId></dependency><dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId></dependency>迭代查询代码,一级缓存与二级缓存结合:@GetMapping("query")publicObjectquery(Stringid){ StringarticleKey="article:"+id; StringarticleKeyRedis="REDIS_ARTICLE:"+id; Articlearticle=cache.get(articleKey,s->{ System.out.println("文章id为"+id+"的没有查询到,则从Redis中查询后返回..."); ArticlearticleReal=null; StringarticleJsonStr=redis.get(articleKeyRedis); //判断从redis中查询到的文章数据是否为空 if(StringUtils.isBlank(articleJsonStr)){ System.out.println("Redis中不存在该文章,将从数据库中查询..."); //如果为空,则进入本条件,则从数据库中查询数据 articleReal=articleService.queryArticleDetail(id); //手动把文章数据设置到redis中,后续再次查询则有值 StringarticleJson=JsonUtils.objectToJson(articleReal); redis.set(articleKeyRedis,articleJson); }else{ System.out.println("Redis中存在该文章,将直接返回..."); //如果不为空,则直接转换json类型article再返回即可 articleReal=JsonUtils.jsonToPojo(articleJsonStr,Article.class); } returnarticleReal; }); returnarticle;}@ResourceprivateIArticleTypeServicearticleTypeService;@ResourceprivateCache<String,List<ArticleType>>articleTypeCache;@ResourceprivateRedisOperatorredis;@Overridepublicvoidrun(String...args)throwsException{ System.out.println("缓存预热。。。"); //1.查询所有分类数据 List<ArticleType>types=articleTypeService.list(); System.out.println(types); StringarticleTypeKey="articleTypeList"; //2.设置分类数据到本地缓存 articleTypeCache.put(articleTypeKey,types); //3.设置分类数据到redis redis.set(articleTypeKey,JsonUtils.objectToJson(types));}修改hostname,可以区分每个tab是哪台虚拟机--获得http的协议版本号--ngx.say("http协议版本:"..ngx.req.http_version());--获得http的请求方法--ngx.say("http的请求method:"..ngx.req.get_method());--http的请求头内容--ngx.say("http的原始请求头内容:"..ngx.req.raw_header());--获得http的请求头信息localmyHeader=ngx.req.get_headers();--ngx.say("token:"..myHeader.token);--ngx.say("uid:"..myHeader.uid);--获得请求中的参数localargs=ngx.req.get_uri_args();--ngx.say("age:"..args["age"]);--ngx.say("birthday:"..args["birthday"]);--获得请求体body中的数据ngx.req.read_body();localbody_data=ngx.req.get_post_args();forkey,valueinpairs(body_data)do ngx.say(key,value);end目标:先查询缓存,如果缓存有数据,则在网关中判断返回即可。如果网关中缓存不存在,则把请求向后端服务转发。--导入工具类引用localhttp=require('http');localredis=require("redis_utils")localget=http.get;localargs=ngx.req.get_uri_args();localarticleId=args["id"];localarticleKey="REDIS_ARTICLE:"..articleId;localarticleDetail=redis.get(articleKey);ifarticleDetail~=ngx.nullthen ngx.say("byopenresty:"..articleDetail); return;end--发送请求localresult=get("/article/query",args);--返回响应ngx.say("byspringboot:"..result);--ngx.say("测试负载均衡-106");