Qt君


  • 首页

  • 关于

  • 归档

  • 搜索

Qml教程-第一个HelloWorld程序

发表于 2019-01-25

1 创建项目

  • 方法1

创建项目方法1

阅读全文 »

QMap容器小知识

发表于 2019-01-24

1 便捷的遍历方法

  • 示例
    1
    2
    3
    4
    QMap<QString, int> map;
    ...
    foreach (int value, map)
    cout << value << endl;
阅读全文 »

使用QUuid生成唯一码

发表于 2019-01-23

1 生成唯一码方法

  • 使用QUuid的createUuid()静态函数;
  • QUuid::createUuid().toString()

2 适用性

  • 在Windows平台上,会生成一个GUID,几乎可以肯定,不管是否联网,它在这个或任何其他系统上都是唯一的;
  • 在Windows平台外,如果系统存在/dev/urandom设备,那么用于构造UUID的数字将具有加密保证,这将使UUID是唯一的。
阅读全文 »

Shell脚本之特殊变量

发表于 2019-01-22

Linux系统Shell脚本特殊变量$0,$$,$?,$#,$*,$@

1 Shell脚本特殊变量

变量 含义
$0 当前脚本的名字
$n 传递给脚本的参数,例:./test.sh 1 2 3 $1为1$2为2,$3为3
$$ 当前进程ID
$? 上个执行命令的退出状态或返回值
$# 脚本传递的参数个数
$* 脚本传递的所有参数
$@ 脚本传递的所有参数,被双引号””包含时,与$*不同
阅读全文 »

Qt信号与槽宏定义

发表于 2019-01-21

1 信号与槽的宏定义

  • METHOD,SLOT,SIGNAL宏前面对应的是字符串数字;
  • #的意思是字符串拼接;
  • METHOD,SLOT,SIGNAL宏实则就是加了前缀的字符串。
    1
    2
    3
    define METHOD(a)   "0"#a
    define SLOT(a) "1"#a
    define SIGNAL(a) "2"#a
阅读全文 »

C语言之变参数宏代替printf

发表于 2019-01-20

#define LOG( format, ... ) printf( format, __VA_ARGS__ )

1 VA_ARGS

  • VA_ARGS是系统预定义宏,被自动替换为参数列表
  • 经常需要进行输出格式化,重定义操作时,可以使用以上技巧;

2 示例代码

1
2
3
4
5
6
7
8
9
#include <stdio.h>

#define LOG( format, ... ) printf( format, __VA_ARGS__ )

int main(int argc, char *argv[])
{
LOG("%s\n", "hello world!");
return 0;
}

3 printf另外宏替换

1
#define LOG printf

兼容Qt4/Qt5版本Qml控件ScrollBar

发表于 2019-01-20

1. ScrollBar演示

ScrollBar

2. 对外属性

  • 继承于Rectangle;
  • target属性继承于Flickable(默认值父控件);
  • orientation设置控件水平还是垂直方向(默认值垂直方向).

ScrollBar.qml

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
import QtQuick 2.0

Rectangle {
id: root

property Flickable target: parent // parent: Flickable
property int orientation: Qt.Vertical
/*
orientation : enumeration
This property holds the orientation of the scroll bar.
Possible values:
|Constant |Description|
|Qt.Horizontal|Horizontal|
|Qt.Vertical |Vertical(default)|
*/

width: orientation == Qt.Vertical ? 15 : target.width
height: orientation == Qt.Vertical ? target.height : 15
color: "white"
opacity: 0.3
radius: 5

Rectangle {
y: orientation == Qt.Vertical ? target.visibleArea.yPosition * target.height : 0
x: orientation == Qt.Vertical ? 0 : target.visibleArea.xPosition * target.width
width: orientation == Qt.Vertical ? parent.width :
target.visibleArea.widthRatio * target.width
height: orientation == Qt.Vertical ? target.visibleArea.heightRatio * target.height :
parent.height
color: "black"
radius: root.radius
opacity: 0.7
}
}

3. 使用示例

3.1 图片显示器

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
import QtQuick 2.0
import "../"

Rectangle {
anchors.fill: parent

Flickable {
id: view
anchors.fill: parent
contentWidth: picture.width
contentHeight: picture.height

Image {
id: picture
source: "Test.png"
asynchronous: true
}
}

ScrollBar {
target: view
}

ScrollBar {
target: view
orientation: Qt.Horizontal
}
}

3.2 ListView附加滚动条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import QtQuick 2.0
import "../"

ListView {
anchors.fill: parent

model: 10
delegate: Rectangle {
width: parent.width; height: 100
color: "lightblue"
Text {
anchors.centerIn: parent
text: index
}
}

ScrollBar { }
}

4. 注意事项

  • 在Qt4下使用需要将QtQuick 2.x改为QtQuick 1.x

5. 源码地址

1
https://github.com/QtComponent/ScrollBar.git

Git帝国之tag大臣

发表于 2019-01-19

    报,一前方战线的情报员说,东南30里敌军攻进来了,所幸我军大部分士兵前去防守及时击退敌军.但我军损失惨重!国王愤怒地锤了一下精雕龙台面,只听到啪啦一声,撕裂了两半,旁边情报员面上刚刚滴下冷汗.

    此时国王对着自己的拳头说,我军每个都是帝国勇士,以一敌十,怎么可能!啪啦旁边的柱子被国王锤凹进去了.必须给出我答案!!!

    台下的众大臣在低声讨论.其中commit大臣说,你看我commit数都有一万多了,士兵没训练一次就commit一次.不然何以战力以一敌十.commit大臣心里暗喜,还好我第一个讲出来,尽量将锅摔出去.

    台上的国王貌似听到了台下commit大臣说的话,啪啦,清脆的一声,国王又锤了旁边的青花瓷.push大臣说每次我都等到commit处理完我就处理完我这边,虽然push次数不多,但也能保证一段时间的push.push大臣与commit大臣互相对了一下眼色,还是摔锅好.台下众大臣们都连忙在摔锅,台上的国王连忙在锤.

    突然的平静,国王回过头来看台下的tag大臣在说你们别摔锅了.这时候不是摔锅时候,敌军就要进行第二次进攻了.其他大臣对tag大臣说,老头,平时不见你,你都不知道累活,滚一边去.tag大臣听到这话也是习以为常,然后说出一句:你行你上!顿时鸦雀无声.

    tag老头平静地说,commit大臣与push大臣平时很辛苦,但是训练得士兵也是个个勇猛.但是缺乏战术,这次战斗中,我方勇士被别人火攻,由于没有对应策略损失特别惨重.啪啦一声,国王锤了一下花岗岩的凳子,国王的手骨折了.愤怒的说,该怎么做!多训练战术吧,tag老头如是说.

    一步两步,一步两步,在食堂前的士兵跳着,撞到了tag老头,老头生气地说,你这是魔鬼的步伐,干嘛了!!!士兵连忙吐了口中的饭说,commit将军让我们连战术,由于时间紧急吃饭的时间也用上了,不然练不好.

    commit大臣此时心里也是难受,战术也commit了很多,但是我想标记一下重要的稳定战术找不到合适的方法.旁边的一个士兵低声说,今天我在食堂撞倒了tag老头貌似他就是做这个工作的.哦原来是tag老头.

    tag老头在床上摸了摸自己的腰,都是那个魔鬼的步伐士兵弄得我下不了床!tag老头听到门外commit大臣与昨天的那个士兵.tag老头心想,你们居然送上门!commit一推开门,还没出声,tag老头就说了一句:来了,老弟!commit老弟冷汗也冒出来了.这是tag老头吗!不管了,上前就问,老头一言不发,只说了一句.我的老腰需要82年的红酒!

    没办法只能满足了!tag老头听了commit老弟的困扰,对这老弟说,还好你找着我了,算你幸运.老弟说我该怎么标记常用稳定的战术(士兵平时训练战术的阵型,方法).

    tag老头不慌不忙地喝了一杯82年的红酒,在纸上写下:git tag tagname.老弟看了看很简单,顿时提出一个疑问:我想标记的时候加上自己的一段话可以吗?

    tag老头又在纸上写下:git tag -a tagname -m "我想标记的时候加上自己的一段话可以吗?"哦,老头你慢慢喝我懂了!老头低声说了一句”你会回来的”!不知道是不是有心还是无意,被commit老弟听到了,回头拿了老头的酒杯和82年的红酒,问:是不是还有什么东西瞒着我!

    没办法,看着那82年的馋酒老头只能回答.老弟,你不是有很多commit的吗?!老弟有些不满,那有怎样了,快说,别造次!给我喝一口我就说.看到老头嘴角的口水,受不了,快喝,喝完快说.

    你可以将历史的觉得重要的(战术)commit也可以打上标签,方法很简单就是在创建标签后加上commit id即可.

    老头快看,是不是这样补打标签git tag -a tagname -m “我想标记的时候加上自己的一段话可以吗?” commitid`.老头趁老弟不注意抢回了酒杯与82年红酒,连忙说是是是.

    第二天一早tag老头的房门就被推开了.tag老头也是在预料之中,说了一句:来了,老弟!老头,老弟我昨天打了很多tag(战术),但是我想回头查看tag信息该怎么查.话刚讲完,老头也刚刚好写完在纸上,你自己看吧.哦,原来是这样!git show tagname

    临出门的时候commit老弟突然想到,如果我想删除tag标记呢?tag老头已经有点不耐烦了,怎么不一次问完.就直接在口中说,git tag -d tagname

    越来越多的士兵在跳着魔鬼的步伐,走路都不忙训练,一步两步,一步两步.tag老头就纳闷了,怎么这个就有效果?摸了摸自己的老腰,还是注意点好.

    啪啦,国王一拳锤去大鼓,说: 勇士们,进击!与此同时,敌军也攻过来了.看来又是一场惨烈的战斗.战斗前tag老头给了一个锦囊给commit老弟.

    报,敌军居然使出最强战术铁桶阵,既守也能攻,士兵如是说.commit大臣听到战报后,说:你有张良计我有过墙梯.不枉士兵们日夜训练魔鬼步伐,我有滚石阵.用统一的步伐去推动巨石滚动破除铁桶阵.可是,commit将军挠挠头,我不知道怎么让他们切换滚石阵.

    战报频频传来,我放损失越来越大,commit将军也越来越焦虑了.突然灵光一闪,我还有锦囊打开一看,纸上写着: 来了,老弟!战场变化瞬息万变,战术也是如此.切换标记(战术)用这个git checkout tagname.看到锦囊瞬速切换好战术,战争局势慢慢扭转最后一举击败敌军.

    庆功宴上,国王用什么战术打赢的.分享给大家吧.此时tag老头偷偷地在纸上写下:git push origin tagname提交战术标记.台下大臣们纷纷表示好战术.commit将军看tag老头要抢我功劳,连忙在纸上写上git push origin --tags提交所有战术标记.台下的大臣们纷纷又说commit将军辛苦了.

C/C++之switch范围判断

发表于 2019-01-18

1 switch范围判断用法,使用’…’符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

int main(int argc, char *argv[])
{
int i = 5;
switch (i) {
case 0 ... 3:
std::cout<<"0-3: "<<i<<std::endl;
break;
case 4 ... 6:
std::cout<<"4-6: "<<i<<std::endl;
break;
case 7 ... 9:
std::cout<<"7-9: "<<i<<std::endl;
break;
case 10:
std::cout<<"10"<<i<<std::endl;
default:
break;
}
return 0;
}

2 输出

阅读全文 »

C/C++魔法宏

发表于 2019-01-17

C/C++魔法宏

1 魔法宏

  • __LINE__ : 代表该行代码的所在行号;
  • __FILE__ : 代表源文件的文件名;
  • __DATE__ : 代表该源文件被编译的(月 日 年)日期格式;
  • __TIME__ : 代表该源文件被编译的(时:分:秒)时间格式;
  • __FUNCTION__ : 代表该源代码中插入当前所在函数名称;
  • __STDC__ : 当该程序严格遵循ANSI C标准时该标识被赋值为1;
  • __cplusplus:当编写的C++程序时该标识符被定义。

2 示例

阅读全文 »
1…303132
Qt君

Qt君

313 日志
41 标签
© 2019 Qt君
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
粤ICP备 - 16070052号