QML介绍

1 什么是QML

QML是一种描述应用程序用户界面的声明式变成语言,使用一些可视化组件以及折现组件之间的交互来描述用户界面。QML一种可读性很高的语言,可以使组件以动态方式进行交互,并且允许组件在用户界面中很容易地实现复用和定义。

2 什么是Qt Quick

Qt Quick 是QML的一个数据类型和功能的标准库,包含了可视化类型、交互类型、动画、例子特效和渲染特效等。在QML应用,可以通过一个简单的import语句来使用该模块提供的所有功能。Qt Quick在Qt5中由Qt Quick 模块提供。

3 QML 语法基础

3.1 导入语句

使用 import QtQuick 导入 模块

模块导入语句

import < ModuleIdentifier > [as < Qualifier > ]

举例:

1
2
3
4
5
6
import QtQuick 2.2 as Quick
Quick.Rectangle{
width:300
height:200
color:"blue"
}

目录导入语句

举例: 该目录下的所有qml文件变成一个对象

1
2
3
4
import "../textwidgets"  as  MyModule
MyModule.Text{
text:"hello"
}

3.2 对象和属性

对象: 使用大括号表示
Rectangle{

}

属性: 使用冒号表示,回车分割。若卸载同一行,用分号分割。
width:100
height:100

width:100;height:100

3.3 布局

anchors.centerIn : parent 表示相对父对象居中

3.4 注释

QML的注释和JS的注释方式一样,使用 // 和 / / 来完成注释

3.5 表达式

可以采用表达式对属性进行赋值:
width :300*2 +50
width :parent.width - 50

3.6 调试输出

console.log()
console.debug()

4 QML类型系统

4.1 QML基本类型

类型 描述
int
bool
double
string
url
list
var
enumeration

4.2 QtQueck 基本类型

类型 描述
color
font
matrix4x4
quaternion
vector2d
vector3d
vacter4d
date
point
size
rect

Git基本操作

安装git

1
apt-get install git

1.创建一个git仓库过程

1
2
3
4
git init --bare note.git  #创建仓库
add user #添加用户
vi /etc/passwd 改/bash/shell ==> /usr/bin/git-shell
chown -R git:git note

2.使用git仓库

1
2
3
4
5
6
7
8
9
10
11
12
git clone git@heiyiren.top:/var/www/git.git
git add readme.txt
git commit -m "add a readfile"
#完成一次修改
git diff readme.txt #比较
git log #查看提交记录
git reset --hard HEAD(^xx) #回退xx个版本
git reflog #比较久的回退
git reset --hard commitid #回退到某个版本
git reset HEAD readme.txt #撤回暂存区文件
git checkout --readme.txt #返回版本库,若存在暂存区则回退暂存区内容
git rm readme.txt #删除文件

PE文件结构浅解析

1.序言

时光荏苒,再次重拾起逆向程序这一块其实我是很开心的,当初之所以选择了别的方向,主要还是担心就业问题,既然能够有机会从事这方面的工作,我得赶紧把之前学习过的知识补救回来,那么就从PE结构开始吧,也怪当初自己学习的时候没有做笔记的习惯,导致现在比较麻烦些。

2.PE文件结构介绍

首先PE结构是windows可执行应用程序的一种格式,如果我们的程序不遵顼PE文件格式,那么windows将无法识别我们的程序,我们在实际编写程序的时候,其实并不需要关注PE文件结构,因为编译器会为我们做好这些,但我们写程序并不能止步于此,懂PE文件结构,懂调试的人甚至能把你整个代码逻辑挖出来,代码基本上很难做到完美无缺陷,一旦被找到漏洞,那么别人的可操作空间就非常高了。因此,我们要知其然且知其所以然,做软件安全方面的工作,要能会攻击,知道别人怎么攻击你的软件,这时候我们才能做出防御,就好比绝地求生这款游戏,游戏开发的很精彩,但由于开发人员对于安全防护上面的不足,导致这款游戏外挂横行,几乎被毁了。

3.PE文件结构浅解析

扯了这么多,要开始学习PE文件结构了,这里用到16进制文件查看器PETools,为了更加清晰,这里所有的数值都使用16进制

蓝桥杯练习题J

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=9

题目描述
【问题描述】 某公司生产长钢管,然后一般,会将钢条切断,变成不同长度,然后去售卖。其中有个问题是,不同长度的钢管的售价是不一样的,但是它们并不是完全按照比例来,比如2米的钢管售价要比3米的钢管售价要少,但是并不是2比3的比例。例如钢管的长度售价表如下: 长度i 1 2 3 4 5 6 7 8 9 10 价格Pi 1 5 8 9 10 17 17 20 24 30 于是问题就来了,比如10米以内的钢管,要如何切割,切割成多长的几条,才能让售价最高?
输入
输入的数据为11个正整数,1-10个正整数代表Pi,即长度为i的钢管价格,第11个正整数N代表要切割的钢管长度。
输出
输出最高售价。结尾加一换行符。

1
2
3
4
样例输入
1 5 8 9 10 17 17 20 24 30 9
样例输出
25

思路:
穷举,把所有的可能都计算出来,最大值就出来了..
代码:

蓝桥杯练习题I

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=1

题目描述
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

输入
输入的第一行有一个正整数L(1 <= L <= 109),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 <= S <= T <= 10,1 <= M <= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。
输出
输出只包括一个整数,表示青蛙过河最少需要踩到的石子数。结尾加一个换行符。
样例输入
10 2 3 5 2 3 5 6 7
样例输出
2
思路:
题目刚开始也没看懂,以为青蛙一定要踩石头,舍友跟我说了青蛙讨厌石头,能不踩就不踩,我才把思路理顺,就是穷举所有情况找到最小值,
代码:

蓝桥杯练习题H

题目描述

回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符   例如mamad   第一次交换 ad : mamda   第二次交换 md : madma   第三次交换 ma : madam (回文!完美!)
输入

第一行是一个整数N,表示接下来的字符串的长度(N <= 8000) 第二行是一个字符串,长度为N.只包含小写字母
输出
如果可能,输出最少的交换次数。 否则输出Impossible (结尾加一个换行符)

1
2
3
4
样例输入
5 mamad
样例输出
3

思路:

这题当时做过,而且错了很多次来着,

首先看看字符串个数 奇数个数是否大于2,大于2就输出 impossible

接着从头开始

比如 a[0]=’a’ 那么最后开始 往前面找 ‘a’ 找到的第一个 ‘a’ 记录其在字符串的位置,计算从当前位置换到最后一个位置需要的步骤数,步骤总数加上步骤数,然后交换2个字符

然后 到 a[1] 找到 与a[1]相同的字符创的位置(逆序) 然后与 倒数第二个 交换

并累加步骤数,直到交换完 n/2 个字符即可

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <cstring>
using namespace std;
char a[100000];
void shift(int i,int j)
{
while(j-i)
{
int t=a[i];
a[i]=a[i+1];
a[i+1]=t;
i++;
}
}
int main()
{
int len,c=0,sum=0,wei=0;
cin>>len;
cin>>a;
for(int i=0;i<len/2;i++)
{
for(int j=len-i-1+c;j>=i;j--)
{
if(a[j]==a[i])
{
if(j==i){
c++;
wei=i;
if(c>1){
cout<<"Impossible";
return 0;
}
break;
}
sum+=(len-i-1+c)-j;
shift(j,len-i-1+c);
break;
}
}
}
if(c!=0)sum+=len/2-wei;
shift(wei,len/2);
cout<<sum<<endl;
return 0;
}

2018年9月28日13:35:37

前段时间发现markdown写笔记真方便,果断弃了WordPress和OneNote,这现在使用atom + git + hexo 来完成我的笔记大业,之前用OneNote写了几篇笔记,这几天把笔记慢慢慢慢转为markdown可真特么累!

这几天用了markdown,连数学公式完全OK,要逆天的节奏。

蓝桥杯练习题F

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=3

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=5

题目描述
马耘是一家上市公司的董事长。10 月1 号是马耘最繁忙的一天,因为这一天有n 家商铺开张,而马耘必须在每家商铺的开业典礼上剪彩,马耘出席时间必须超过该开业典礼时间的一半并且不能打断。请问马耘如何安排他的日程,以便他能够出席所有的开业典礼? 请注意: 马耘不能在同一时间参加两个开业典礼; 马耘只能在整数时间加入或者退出开业典礼; 马耘可以在他完成前一个开业典礼后马上出现在另一个开业典礼上。 设计一个算法,判断马耘能否参加所有的开业典礼

输入

第一行包含一个整数n ( 0 <= n <= 10000 ),表示共有n 家商铺开张。接下来的n 行,每行包含两个整数Si 和Ti,分别表示开业典礼的开始时间和结束时间。( 0 <=Si,Ti <= 2^31 )。

输出
如果马耘可以参加所有的开业典礼,输出“YES” 。否则,输出“NO”。(结尾加一个换行符)

1
2
3
4
5
6
样例输入
2
1 5
4 6
样例输出
YES

蓝桥杯练习题E

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=3

题目描述
给一个二维的矩阵,包含 字母’X’ 和 ‘O’,找到所有被 ‘X’ 围绕的区域,并用 ‘X’ 填充满。
输入
输入数据有多行,第一输入一个n,代表下面要输入一个n×n的矩阵矩阵由X’ 和 ‘O’ 的二维数组。
输出

输出用 ‘X’ 填充完的二维数组。(结尾加一个换行符)
样例输入

1
2
3
4
5
6
7
8
9
10
4
XXXX
XOOX
XXOX
XOXX
样例输出
XXXX
XXXX
XXXX
XOXX

蓝桥杯练习题E

来源:http://oj.mofriend.net/problem.php?cid=1203&pid=3

题目描述
给一个二维的矩阵,包含 字母’X’ 和 ‘O’,找到所有被 ‘X’ 围绕的区域,并用 ‘X’ 填充满。
输入
输入数据有多行,第一输入一个n,代表下面要输入一个n×n的矩阵矩阵由X’ 和 ‘O’ 的二维数组。
输出

输出用 ‘X’ 填充完的二维数组。(结尾加一个换行符)
样例输入

1
2
3
4
5
6
7
8
9
10
4
XXXX
XOOX
XXOX
XOXX
样例输出
XXXX
XXXX
XXXX
XOXX