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

hyip网站开发wordpress插件 数据库

hyip网站开发,wordpress插件 数据库,建筑人才网官网挂证,做网站做域名目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…

目录

1.知识点概述

2.单例介绍

3.单例饿汉模式

4.饿汉模式四个版本

5.单例类的使用

6.关于token的作用和存储

7.样式表使用方法

8.qss文件中选择器介绍

9.qss文件样式讲解和测试

10.qss美化登录界面补充

11.QHTTPMULTIPART类的使用

12.文件上传协议

13.文件上传协议

14.QT中散列值的计算

15.设定nginx接受的最大文件上限


1.知识点概述

1.1 选择器类型
选择器
示例
说明
通用选择
*
匹配所有部件 匹配当前窗口所有的子窗口
类型选择
QWidget
匹配 QWidget 及其子类窗口的实例
类选择器
.QPushButton
匹配 QPushButton 的实例,但不包含子类。相当于 *
[class~=”QPushButton”]
ID 选择器
QPushButton#okButton
匹配所有 objectName okButton QPushButton 实例。
后代选择
QDialog QPushButton
匹配属于 QDialog 后代(孩子,孙子等)的 QPushButton 所有实
例。
子选择器
QDialog >QPushButton
匹配属于 QDialog 直接子类的 QPushButton 所有实例。
1.2 QSS 的使用步骤
1.3 登录窗口设置
1. 添加一个新文件 , 文件后缀 . qss
- 位置 : 项目文件 xxx . pro 同一级 , 或者更深的目录中
- 添加注释 : 使用 /**/
2. qss 文件编码格式 , 必须是 utf - 8
3. 编写 qss 文件 , 给对应的控件设置样式
4. qss 加载到程序中
- 使用 QFile 将文件内容读到内存 , 得到了一个字符串
- 需要将这个字符串对应的样式设置给当前应用程序的对象
- QApplication 对象
- key 使用 qApp 全局指针进行访问 , 指向 QApplication 对象
- 设置方式 : setStyleSheet ( QString style )
5. qss 添加到资源文件中

2.单例介绍

2.1 常用的四种方式
application/x-www-form-urlencoded
application/json
text/xml
multipart/form-data
/* 登录窗口设置背景图片 */
/* 登录窗口所有控件设置字体 , 字体大小 */
/* 设置登录 / 注册 / 服务器设置窗口标题字体 , 字体大小 */
/* 设置 logo 显示的图片 */
/* 设置窗口标题字体 , 字体大小 , 加粗 */
/* 没有账号马上注册按钮 : 字体颜色和添加下划线 */
/* 登录 / 注册 /OK 按钮 : 字体颜色 , 宽度 , 高度 , 字体大小 , 显示图片 */
/* 标题栏按钮 : normal, hover, press 三种状态切换 */
1
2
3
4
5
6
7
8
# 请求行
POST http: //www.example.com HTTP/1.1
# 请求头
Content-Type: application/x-www-form-urlencoded;charset=utf-8
# 空行
# 请求数据 ( 向服务器提交的数据 )
title=test&user=kevin&passwd=32222
1
2
3
4
5
6
7
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title": "test","sub":[1,2,3]}
1
2
3
POST http://www.example.com HTTP/1.1
Content-Type: text/xml
<?xml version="1.0" encoding="utf8"?>
<methodcall>
<methodname color="red">examples.getStateName</methodname>
<params>
<value><i4>41</i4></value>
</params>
</methodcall>
1
2
3
4
5
6
7
8
9 2.2 multipart/form-data
1. QHttpPart
2. QHttpMultiPart
3. 上传协议
1. 秒传
客户端
POST http://www.example.com HTTP/1.1
Content-Type: multipart/form-data
# 发送的数据
------WebKitFormBoundaryPpL3BfPQ4cHShsBz \r\n
Content-Disposition: form-data; name="file"; filename="qw.png"; md5="xxxxxxxxxx"
Content-Type: image/png\r\n;
\r\n
............. 文件内容 ................
............. 文件内容 ................
------WebKitFormBoundaryPpL3BfPQ4cHShsBz--
1
2
3
4
5
6
7
8
9
10
// 设置头信息
void QHttpPart::setHeader ( QNetworkRequest::KnownHeaders header , const QVariant & value )
// 设置数据
void QHttpPart::setBody ( const QByteArray & body )
void QHttpPart::setBodyDevice ( QIODevice * device )
1
2
3
4
5
QHttpMultiPart::QHttpMultiPart ( ContentType contentType , QObject * parent = Q_NULLPTR )
- 参数 contentType : QHttpMultiPart::FormDataType
void QHttpMultiPart::append ( const QHttpPart & httpPart )
- 参数 httpPart : 初始化好的数据块对象
QByteArray QHttpMultiPart::boundary () const
- 返回值 : 数据格式中的分界线
// 自己指定分界线 , 一般情况下不需要
void QHttpMultiPart::setBoundary ( const QByteArray & boundary )

3.单例饿汉模式

4.饿汉模式四个版本

5.单例类的使用

6.关于token的作用和存储

上传协议
1. 秒传
客户端
POST http://www.example.com HTTP/1.1
Content-Type: multipart/form-data
# 发送的数据
------WebKitFormBoundaryPpL3BfPQ4cHShsBz \r\n
Content-Disposition: form-data; name="file"; filename="qw.png"; md5="xxxxxxxxxx"
Content-Type: image/png\r\n;
\r\n
............. 文件内容 ................
............. 文件内容 ................
------WebKitFormBoundaryPpL3BfPQ4cHShsBz--
1
2
3
4
5
6
7
8
9
10
// 设置头信息
void QHttpPart::setHeader ( QNetworkRequest::KnownHeaders header , const QVariant & value )
// 设置数据
void QHttpPart::setBody ( const QByteArray & body )
void QHttpPart::setBodyDevice ( QIODevice * device )
1
2
3
4
5
QHttpMultiPart::QHttpMultiPart ( ContentType contentType , QObject * parent = Q_NULLPTR )
- 参数 contentType : QHttpMultiPart::FormDataType
void QHttpMultiPart::append ( const QHttpPart & httpPart )
- 参数 httpPart : 初始化好的数据块对象
QByteArray QHttpMultiPart::boundary () const
- 返回值 : 数据格式中的分界线
// 自己指定分界线 , 一般情况下不需要
void QHttpMultiPart::setBoundary ( const QByteArray & boundary )
-
1
2
3
4
5
6
7
8
9
# url
http: //127.0.0.1:80/md5
# post 数据格式
{
user:xxxx,
token:xxxx,
md5:xxx,
fileName: xxx
}
1
2
3
4
5
6
7
8
9 文件已存在 ( 秒传成功 )
{"code":"005"}
秒传成功:
{"code":"006"}
秒传失败:
{"code":"007"}
服务器
2. 上传
客户端
成功
{"code":"008"}
失败
{"code":"009"}
服务器
Nginx 设置
服务器端 fastCGI 部分 代码
# url
http: //127.0.0.1:80/upload
# post 数据格式
------WebKitFormBoundary88asdgewtgewx\r\n
Content-Disposition: form-data; user="mike"; filename="xxx.jpg"; md5="xxxx";
size=10240
Content-Type: text/plain
真正的文件内容
------WebKitFormBoundary88asdgewtgewx--
1
2
3
4
5
6
7
8
# nginx 将数据转发给对应的 fastCGI 程序
location / upload
{
fastcgi_pass 地址 :port;
include fastcig.conf;
}
# 重新加载 nginx 配置文件
sudo nginx -s reload
// 取出 Content-Disposition 中的键值对的值 , 并得到文件内容 , 并将内容写入文件
int recv_save_file ( char * user , char * filename , char * md5 , long * p_size )
{
int ret = 0 ;
char * file_buf = NULL ;
char * begin = NULL ;
char * p , * q , * k ;
8 char content_text [ 512 ] = { 0 }; // 文件头部信息
char boundary [ 512 ] = { 0 }; // 分界线信息
//==========> 开辟存放文件的 内存 <===========
file_buf = ( char * ) malloc ( 4096 );
if ( file_buf == NULL )
{
return - 1 ;
}
// 从标准输入 (web 服务器 ) 读取内容
int len = fread ( file_buf , 1 , 4096 , stdin );
if ( len == 0 )
{
ret = - 1 ;
free ( file_buf );
return ret ;
}
//===========> 开始处理前端发送过来的 post 数据格式 <============
begin = file_buf ; // 内存起点
p = begin ;
/*
------WebKitFormBoundary88asdgewtgewx\r\n
Content-Disposition: form-data; user="mike"; filename="xxx.jpg";
md5="xxxx"; size=10240\r\n
Content-Type: application/octet-stream\r\n
------WebKitFormBoundary88asdgewtgewx--
*/
//get boundary 得到分界线 , ------WebKitFormBoundary88asdgewtgewx
p = strstr ( begin , "\r\n" );
if ( p == NULL )
{
ret = - 1 ;
free ( file_buf );
return ret ;
}
// 拷贝分界线
strncpy ( boundary , begin , p - begin );
boundary [ p - begin ] = '\0' ; // 字符串结束符
p += 2 ; //\r\n
// 已经处理了 p-begin 的长度
len -= ( p - begin );
//get content text head
begin = p ;
//Content-Disposition: form-data; user="mike"; filename="xxx.jpg"; md5="xxxx";
size=10240\r\n
p = strstr ( begin , "\r\n" );
if ( p == NULL )
59 {
ret = - 1 ;
free ( file_buf );
return ret ;
}
strncpy ( content_text , begin , p - begin );
content_text [ p - begin ] = '\0' ;
p += 2 ; //\r\n
len -= ( p - begin );
//======================================== 获取文件上传者
//Content-Disposition: form-data; user="mike"; filename="xxx.jpg"; md5="xxxx";
size=10240\r\n
q = begin ;
q = strstr ( begin , "user=" );
q += strlen ( "user=" );
q ++ ; // 跳过第一个 "
k = strchr ( q , '"' );
strncpy ( user , q , k - q ); // 拷贝用户名
user [ k - q ] = '\0' ;
//======================================== 获取文件名字
//"; filename="xxx.jpg"; md5="xxxx"; size=10240\r\n
begin = k ;
q = begin ;
q = strstr ( begin , "filename=" );
q += strlen ( "filename=" );
q ++ ; // 跳过第一个 "
k = strchr ( q , '"' );
strncpy ( filename , q , k - q ); // 拷贝文件名
filename [ k - q ] = '\0' ;
//======================================== 获取文件 MD5
//"; md5="xxxx"; size=10240\r\n
begin = k ;
q = begin ;
q = strstr ( begin , "md5=" );
q += strlen ( "md5=" );
q ++ ; // 跳过第一个 "
k = strchr ( q , '"' );
strncpy ( md5 , q , k - q ); // 拷贝文件名
md5 [ k - q ] = '\0' ;
//======================================== 获取文件大小
//"; size=10240\r\n
begin = k ;
q = begin ;
q = strstr ( begin , "size=" );
q += strlen ( "size=" );
k = strstr ( q , "\r\n" );
char tmp [ 256 ] = { 0 };
strncpy ( tmp , q , k - q ); // 内容
111 使用 fastCGI 管理器启动 fastCGI 程序
4. Http 上传下载进度
tmp [ k - q ] = '\0' ;
* p_size = strtol ( tmp , NULL , 10 ); // 字符串转 long
begin = p ;
p = strstr ( begin , "\r\n" );
p += 2 ; //\r\n
len -= ( p - begin );
// 下面才是文件的真正内容
/*
------WebKitFormBoundary88asdgewtgewx\r\n
Content-Disposition: form-data; user="mike"; filename="xxx.jpg";
md5="xxxx"; size=10240\r\n
Content-Type: application/octet-stream\r\n
真正的文件内容 \r\n
------WebKitFormBoundary88asdgewtgewx--
*/
// begin 指向正文首地址
begin = p ;
// 将文件内容抠出来
// 文件内容写如本地磁盘文件
free ( file_buf );
return ret ;
}
spawn-fcgi -a IP 地址 -p 端口 -f ./fastcgi 程序
- 提示启动失败
- ldd fastCGI 程序

7.样式表使用方法

8.qss文件中选择器介绍

9.qss文件样式讲解和测试

10.qss美化登录界面补充

11.QHTTPMULTIPART类的使用

12.文件上传协议

13.文件上传协议

14.QT中散列值的计算

15.设定nginx接受的最大文件上限


文章转载自:

http://9mYzvgZj.wsLpk.cn
http://XGVIeCfK.wsLpk.cn
http://s04SuPjg.wsLpk.cn
http://ZOLg98u7.wsLpk.cn
http://Z6pG9aJI.wsLpk.cn
http://ojFnSA5u.wsLpk.cn
http://XHOAT7o9.wsLpk.cn
http://BEYsxDXY.wsLpk.cn
http://l5CGmMDr.wsLpk.cn
http://O6frHfWU.wsLpk.cn
http://s7i7Rlmz.wsLpk.cn
http://EPySHn3F.wsLpk.cn
http://WHhEM3cn.wsLpk.cn
http://dvTqxbTE.wsLpk.cn
http://6fUWkSCK.wsLpk.cn
http://2uSaVEe4.wsLpk.cn
http://CVeLVdBK.wsLpk.cn
http://EgqehN92.wsLpk.cn
http://xgZk8MgY.wsLpk.cn
http://UYp7M35z.wsLpk.cn
http://dAz5bhm1.wsLpk.cn
http://6lx4msq3.wsLpk.cn
http://QQtKChew.wsLpk.cn
http://4C9UF7yu.wsLpk.cn
http://z5JPDhGY.wsLpk.cn
http://Rnc9kIuS.wsLpk.cn
http://7iELWEgX.wsLpk.cn
http://JOjpw0yr.wsLpk.cn
http://ik0MrktM.wsLpk.cn
http://8S7AEwuH.wsLpk.cn
http://www.dtcms.com/wzjs/774122.html

相关文章:

  • 如何在自己的服务器上搭建微网站品牌建设部门的搭建
  • 哈尔滨模板建站新报价常德做网站专业公司哪家好
  • 网页制作工具分为站长工具seo综合查询怎么看数据
  • 莆田建设网站盐城哪家专业做网站
  • 如何制作简易 网站做网站需要用到那些软件
  • 电脑维修网站模板vi设计应用部分有哪些
  • 电商网站建设思维导图专业网站优化排名
  • 网站做排名有用吗电子商务网站建设与管理试题
  • 企业单位网站怎么做自己做网站是不是需要写代码
  • 萝岗高端网站建设如何自己做网址
  • 做断桥铝窗户的网站关注公众号赚钱
  • 济南浩辰网站建设公司怎么样网站建设 百度云盘
  • 利用wix建手机网站国外网站设计公司
  • 大型综合门户网站开发建设网站有何要求
  • 网站ui设计报价单wordpress文件上传位置
  • 海参企业网站怎么做视频网站 建设 硬件
  • 大理州建设局网站电商网站建设图片
  • 钓鱼网站二维码制作软件小程序分销怎么做好分销
  • 主播网站建设微信网站开发 新闻
  • 爱站网挖掘工具自己服务器做网站服务器备案
  • 仿励志一生lz13网站整站源码贵州省城乡建设厅网站
  • 免费wap自助建站系统网页设计代码html文件怎么查
  • 山西省建设注册中心网站百度seo排名帝搜软件
  • 山东省和住房城乡建设厅网站首页wordpress 添加js引用
  • 帝国cms教程wordpress加速优化服务
  • 购买友情链接网站广州自助公司建网站
  • 南宁市住房和城乡建设局网站discuz手机版
  • 绍兴做外贸网站的公司中国精品课程网站
  • 思勤传媒网站建设公司企业门户网站开发价格
  • 东台做网站的公司公司网站优化推广方案