├── 360
├── 360.qrc
├── BottomBar.qml
├── MainPage.qml
├── Mainview.qml
├── MidChangePart.qml
├── MidPage.qml
├── TopBar.qml
└── common
│ ├── AnimationButton.qml
│ ├── CustomButton.qml
│ ├── CustomProgressBar.qml
│ ├── DDImage.qml
│ ├── DDText.qml
│ ├── SigleButton.qml
│ └── Win10Setting.qml
├── 360.rc
├── 360logo.ico
├── Driver
├── BDTableView.qml
├── DDDriverView.qml
├── DDDynamicTable.qml
└── DDTabView.qml
├── DriverQtVersion.pro
├── QQ
├── DDQQMainView.qml
└── DDQQPageView.qml
├── READMe.md
├── XunLei
├── DDXunGridView.qml
├── DDXunLei.qml
├── DDXunLocalView.qml
├── DDXunView.qml
├── Online
│ ├── local.xml
│ └── online.xml
├── bg.jpg
├── local.png
├── skinData.xml
└── xl.png
├── ZB2129102102910290.png
├── ddui
├── DDAbstractView.qml
├── DDBottomBar.qml
├── DDCloseButton.qml
├── DDHomeButton.qml
├── DDMidView.qml
├── DDSplitView.qml
├── DDTopBar.qml
├── DDuiShadowBg.qml
├── ddframeless_helper.cpp
├── ddframeless_helper.h
├── ddnewquickwindow.cpp
├── ddnewquickwindow.h
├── ddquickview.cpp
├── ddquickview.h
├── ddview.cpp
└── ddview.h
├── deployment.pri
├── driver.png
├── images
├── 360
│ ├── btm
│ │ ├── qinglilaji_yijianqingli_Anima_Hover.png
│ │ ├── qinglilaji_yijianqingli_Anima_Leave.png
│ │ ├── shamuma_new_Anima_Hover.png
│ │ ├── shamuma_new_Anima_Leave.png
│ │ ├── youhuajiasu_Anima_Hover.png
│ │ └── youhuajiasu_Anima_Leave.png
│ └── main
│ │ ├── 360logo.ico
│ │ ├── MedalUnLight2.png
│ │ ├── Skin.png
│ │ ├── android_48.png
│ │ ├── assistant_qt.png
│ │ ├── background_mainwnd.jpg
│ │ ├── btn_examine_now.png
│ │ ├── btn_fix_all.png
│ │ ├── btn_fix_background.png
│ │ ├── btn_install_360sd.png
│ │ ├── btn_reexamine.png
│ │ ├── btn_run.png
│ │ ├── btn_scan_background.png
│ │ ├── btn_view_detail.png
│ │ ├── chart_48.png
│ │ ├── close.png
│ │ ├── detail_button_onekey.png
│ │ ├── dl_logo.png
│ │ ├── feedback.png
│ │ ├── jjx_winpe_normal.png
│ │ ├── menu.png
│ │ ├── min.png
│ │ ├── more.png
│ │ ├── payinsure_icon_360cr_normal.png
│ │ ├── payinsure_safe_hover.png
│ │ ├── payinsure_safe_normal.png
│ │ ├── payinsure_safe_press.png
│ │ ├── security_safe_hover.png
│ │ ├── security_safe_normal.png
│ │ ├── security_safe_press.png
│ │ ├── share_weibo_icon.png
│ │ ├── update_btn.png
│ │ ├── v_line.png
│ │ └── win10.png
├── 128.png
├── close.png
├── close_hover.png
├── close_pressed.png
├── matrix.png
├── mid.jpg
├── qr.jpg
└── right.jpg
├── imgqrc.qrc
├── main.cpp
├── matrix
└── MatrixItem.qml
├── model
├── bdtablemodel.cpp
└── bdtablemodel.h
├── poetry
├── DDPoeComing.qml
├── DDPoeTryPage.qml
└── DDPoeTryView.qml
├── qml.qrc
└── youzan
├── DDAbstractView.qml
├── DDCloseButton.qml
├── DDuiShadowBg.qml
├── Makefile.Debug
├── README.md
├── YZCalView.qml
├── YouZanAnimation.qml
├── YouZanApi.qml
├── YouZanMain.qml
├── YouZanView.qml
├── YouZanWindow.qml
├── YouzanApi.pro
├── YouzanBottomGroup.qml
├── YouzanItem.qml
├── YouzanSlider.qml
├── YouzanTextTime.qml
├── deployment.pri
├── main.cpp
├── qml.qrc
├── qrc_qml.cpp
├── youzan.js
├── youzan.jsc
├── youzanapi.cpp
├── youzanapi.h
├── youzanobject.cpp
├── youzanobject.h
└── youzhan.json
/360.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/360.rc
--------------------------------------------------------------------------------
/360/360.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainPage.qml
4 | TopBar.qml
5 | common/CustomButton.qml
6 | common/DDImage.qml
7 | common/DDText.qml
8 | BottomBar.qml
9 | common/SigleButton.qml
10 | common/AnimationButton.qml
11 | MidPage.qml
12 | MidChangePart.qml
13 | common/CustomProgressBar.qml
14 | common/Win10Setting.qml
15 | Mainview.qml
16 |
17 |
18 |
--------------------------------------------------------------------------------
/360/BottomBar.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "./common" as Common
3 |
4 | Rectangle {
5 | height: 162
6 | width: parent.width
7 | color: "white"
8 |
9 | Row{
10 | anchors.left: parent.left
11 | anchors.leftMargin: 30
12 | width: parent.width*2/5
13 | height: parent.height
14 | spacing: 20
15 | Common.AnimationButton{
16 | framecount: 10
17 | framewidth: 950/framecount
18 | frameheight: 95
19 | btnurl: "qrc:/images/360/btm/shamuma_new_Anima_Hover.png"
20 | anchors.verticalCenter: parent.verticalCenter
21 | btmTitle: "查杀修复"
22 | }
23 |
24 | Common.AnimationButton{
25 | framecount: 10
26 | framewidth: 950/framecount
27 | frameheight: 95
28 | btnurl: "qrc:/images/360/btm/qinglilaji_yijianqingli_Anima_Hover.png"
29 | anchors.verticalCenter: parent.verticalCenter
30 | btmTitle: "电脑清理"
31 | }
32 |
33 | Common.AnimationButton{
34 | framecount: 10
35 | framewidth: 950/framecount
36 | frameheight: 95
37 | btnurl: "qrc:/images/360/btm/youhuajiasu_Anima_Hover.png"
38 | anchors.verticalCenter: parent.verticalCenter
39 | btmTitle: "加速优化"
40 | }
41 | }
42 |
43 |
44 | Common.Win10Setting{
45 | id:win10Id
46 | anchors.right: parent.right
47 | anchors.rightMargin: 10
48 | anchors.top: parent.top
49 | anchors.topMargin: 10
50 | width: parent.width/4
51 | height: parent.height/2-20
52 | }
53 | Common.SigleButton{
54 | id:safeIndicator
55 | btmTitle: "软件管家"
56 | txtColor:"grey"
57 | anchors.right: safeIndicator2.left
58 | anchors.rightMargin: 20
59 | width: 50
60 | anchors.bottom: parent.bottom
61 | anchors.bottomMargin: 10
62 | btnurl: "qrc:/images/360/main/jjx_winpe_normal.png"
63 | reallysigle:true
64 | }
65 | Common.SigleButton{
66 | id:safeIndicator2
67 | btmTitle: "图表"
68 | txtColor:"grey"
69 | anchors.right: safeIndicator3.left
70 | anchors.rightMargin: 20
71 | width: 50
72 | anchors.bottom: parent.bottom
73 | anchors.bottomMargin: 10
74 | btnurl: "qrc:/images/360/main/chart_48.png"
75 | reallysigle:true
76 | }
77 | Common.SigleButton{
78 | id:safeIndicator3
79 | btmTitle: "Qt助手"
80 | txtColor:"grey"
81 | anchors.right: safeIndicator4.left
82 | anchors.rightMargin: 20
83 | width: 50
84 | anchors.bottom: parent.bottom
85 | anchors.bottomMargin: 10
86 | btnurl: "qrc:/images/360/main/assistant_qt.png"
87 | reallysigle: true
88 | }
89 | Common.SigleButton{
90 | id:safeIndicator4
91 | btmTitle: "AD助手"
92 | txtColor:"grey"
93 | anchors.right: safeIndicator5.left
94 | anchors.rightMargin: 20
95 | width: 50
96 | anchors.bottom: parent.bottom
97 | anchors.bottomMargin: 10
98 | btnurl: "qrc:/images/360/main/android_48.png"
99 | reallysigle: true
100 | }
101 | Common.DDImage{
102 | id:safeIndicator5
103 | // height: safeIndicator.height
104 | anchors.right: parent.right
105 | anchors.rightMargin: 10
106 | width: 50
107 | anchors.bottom: parent.bottom
108 | anchors.bottomMargin: 18
109 | source: "qrc:/images/360/main/more.png"
110 | }
111 | // }
112 |
113 | }
114 |
--------------------------------------------------------------------------------
/360/MainPage.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | BorderImage {
4 | id: name
5 | // source: "file:///C:/Qt/360/menghuansanjiao/MainFrame/Image/background_mainwnd.jpg"
6 | source: "qrc:/images/360/main/background_mainwnd.jpg"
7 | width: 100; height: 100
8 | border.left: 5; border.top: 5
9 | border.right: 5; border.bottom: 5
10 | TopBar{
11 | id:topBar
12 | width: parent.width
13 | height: 40
14 | }
15 | MidPage{
16 | anchors.top: topBar.bottom
17 | width: parent.width
18 | anchors.bottom: btmBar.top
19 | }
20 |
21 | BottomBar {
22 | id:btmBar
23 | width: parent.width
24 | anchors.bottom: parent.bottom
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/360/Mainview.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.2
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Window 2.1
4 | import QtQuick.Dialogs 1.2
5 | import "../ddui" as DDui
6 |
7 | DDui.DDAbstractView {
8 | id:ui360
9 | visible: true
10 | width: 900+bgMarign*2
11 | height: 600+bgMarign*2
12 | //与C++进行通信的对象
13 | Connections {
14 | //target: yzObj
15 | //onSignalPrintFinished: console.log("The print page data finished!")
16 | }
17 | DDui.DDuiShadowBg{
18 | id:bg
19 | width: ui360.width
20 | height: ui360.height
21 | bgmarigns: ui360.bgMarign
22 | MainPage{
23 | id:youzanView
24 | anchors.fill: parent
25 | anchors.margins: ui360.bgMarign
26 | }
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/360/MidChangePart.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 | import QtQuick.Controls 1.0
3 | import "./common" as Common
4 |
5 | Item {
6 | property string mainTitle: "使用QtQuick开发,让您更酷炫"
7 | property string subTitle: "建议下载360杀毒,防护更全面,电脑更安全"
8 | signal changePageTo(int cmd)
9 |
10 | ProgressBar {
11 | id:progressBar
12 | anchors.left: parent.left
13 | anchors.leftMargin: 36
14 | anchors.top: parent.top
15 | anchors.topMargin: 36
16 | value: 0.88
17 | width:168
18 | height:width
19 | style:Common.CustomProgressBar{
20 | }
21 | }
22 |
23 | Column{
24 | anchors.left:progressBar.right
25 | anchors.leftMargin: 35
26 | anchors.top: parent.top
27 | anchors.topMargin: 36+progressBar.height/4
28 | spacing: 4
29 |
30 | Common.DDText{
31 | id:mainTxt
32 | text: mainTitle
33 | font.pixelSize: 30
34 | color: "white"
35 | font.letterSpacing: 2
36 |
37 | }
38 |
39 | Common.DDText{
40 | id:subTxt
41 | text:subTitle
42 | font.pixelSize: 14
43 | color: "white"
44 | }
45 | }
46 |
47 | Common.CustomButton {
48 | id: updateImg
49 | btnurl: "qrc:/images/360/main/btn_view_detail.png"
50 | framewidth : 848/framecount
51 | frameheight: 74//
52 | framecount: 4
53 | anchors.horizontalCenter: parent.horizontalCenter
54 | anchors.bottom: parent.bottom
55 | anchors.bottomMargin: 0
56 | clickType: 11
57 | onSignalClickedBtn: {
58 | changePageTo(clickType);
59 | //signalQmlOptions("close app","system");
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/360/MidPage.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "./common" as Common
3 |
4 | Item {
5 | MidChangePart{
6 | id:changedPart
7 | width: parent.width
8 | height: parent.height*4/5
9 | }
10 |
11 | Row{
12 | anchors.left:parent.left
13 | anchors.leftMargin: 25
14 | anchors.bottom: parent.bottom
15 | anchors.bottomMargin: 30
16 | spacing: 20
17 | height: parent.height/5
18 | width: parent.width/2
19 | Common.SigleButton{
20 | id:safeIndicator
21 | btmTitle: "安全防护中心"
22 | }
23 | Common.DDImage{
24 | source: "qrc:/images/360/main/v_line.png"
25 | height: parent.height*2/3
26 | anchors.verticalCenter: parent.verticalCenter
27 | }
28 | Common.SigleButton{
29 | id:shopping
30 | btnurl: "qrc:/images/360/main/payinsure_safe_"
31 | btmTitle: "网购先赔"
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/360/TopBar.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "./common/" as Common
3 |
4 | Item {
5 |
6 | Common.DDImage {
7 | id: logo
8 | source: "qrc:/images/360/main/dl_logo.png"
9 | anchors.left: parent.left
10 | anchors.leftMargin: 10
11 | anchors.top: parent.top
12 | anchors.topMargin: 6
13 | }
14 | Common.DDText{
15 | id:textId
16 | anchors.left: logo.right
17 | anchors.leftMargin: 4
18 | anchors.top: parent.top
19 | anchors.topMargin: 6
20 | color: "white"
21 | text: "QtQuick协助360安全卫士领航版"
22 | font.pixelSize:12
23 | }
24 | Common.CustomButton {
25 | id: updateImg
26 | btnurl: "qrc:/images/360/main/update_btn.png"
27 | anchors.left: textId.right
28 | anchors.leftMargin: 1
29 | anchors.top: parent.top
30 | anchors.topMargin: 6
31 | framewidth : 68/framecount
32 | frameheight: 17//
33 | clickType: 8
34 | onSignalClickedBtn: {
35 | //signalQmlOptions("close app","system");
36 | }
37 | }
38 | Common.CustomButton {
39 | id:mdalBtn
40 | anchors.right: shareBtn.left
41 | anchors.top:parent.top
42 | anchors.rightMargin: 0
43 | framewidth : 96/framecount
44 | frameheight: 32//
45 | clickType: 1
46 | btnurl: "qrc:/images/360/main/MedalUnLight2.png"
47 | onSignalClickedBtn: {
48 | //signalQmlOptions("close app","system");
49 | }
50 | }
51 | Common.CustomButton {
52 | id:shareBtn
53 | anchors.right: skinBtn.left
54 | anchors.top:parent.top
55 | anchors.rightMargin: 0
56 | framewidth : 116/framecount
57 | frameheight: 24//qrc:/images/360/main/MedalUnLight2.png
58 | clickType: 6
59 | btnurl: "qrc:/images/360/main/share_weibo_icon.png"
60 | onSignalClickedBtn: {
61 | //signalQmlOptions("close app","system");
62 | }
63 | }
64 | Common.CustomButton {
65 | id:skinBtn
66 | anchors.right: feedBackBtn.left
67 | anchors.top:parent.top
68 | anchors.rightMargin: 0
69 | framewidth : 116/framecount
70 | frameheight: 24
71 | clickType: 5
72 | btnurl: "qrc:/images/360/main/Skin.png"
73 | onSignalClickedBtn: {
74 | //signalQmlOptions("close app","system");
75 | }
76 | }
77 | Common.CustomButton {
78 | id:feedBackBtn
79 | anchors.right: menuBtn.left
80 | anchors.top:parent.top
81 | anchors.rightMargin: 0
82 | framewidth : 108/framecount
83 | frameheight: 22
84 | clickType: 4
85 | btnurl: "qrc:/images/360/main/feedback.png"
86 | onSignalClickedBtn: {
87 | //signalQmlOptions("close app","system");
88 | }
89 | }
90 | Common.CustomButton {
91 | id:menuBtn
92 | anchors.right: minBtn.left
93 | anchors.top:parent.top
94 | anchors.rightMargin: 0
95 | framewidth : 116/framecount
96 | clickType: 3
97 | btnurl: "qrc:/images/360/main/menu.png"
98 | onSignalClickedBtn: {
99 | signalQmlOptions("system","menu");
100 | }
101 | }
102 | Common.CustomButton {
103 | id:minBtn
104 | anchors.right: closeBtn.left
105 | anchors.top:parent.top
106 | anchors.rightMargin: 0
107 | framewidth : 116/framecount
108 | clickType: 2
109 | btnurl: "qrc:/images/360/main/min.png"
110 | onSignalClickedBtn: {
111 | signalQmlOptions("system","min");
112 | }
113 | }
114 | Common.CustomButton {
115 | id:closeBtn
116 | anchors.right: parent.right
117 | anchors.top:parent.top
118 | anchors.rightMargin: 0
119 | onSignalClickedBtn: {
120 | signalQmlOptions("system","close");
121 | }
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/360/common/AnimationButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.0
3 |
4 | Item {
5 | property int framewidth: 950/10
6 | property int frameheight: 95
7 | property int framecount: 10
8 | property int frameduration: 100
9 | property url btnurl: "qrc:/images/360/btm/qinglilaji_yijianqingli_Anima_Hover.png"
10 | property string btmTitle: "电脑清理"
11 | property int clickType: 0
12 | signal signalClickedBtn(int clicktype); //0 close 1:min 2:menu 3:feedback
13 | clip: true
14 |
15 | width: framewidth
16 | height: frameheight+txtId.height
17 |
18 | MouseArea{
19 | id:ma
20 | anchors.fill: animated
21 | hoverEnabled: true
22 | onEntered: {
23 | console.log("onEntered")
24 | animated.running = true;
25 | animated.resume();
26 | }
27 | onExited: {
28 | console.log("onExited")
29 | animated.running = true;
30 | animated.currentFrame = 0
31 | animated.pause()
32 | }
33 | }
34 | AnimatedSprite {
35 | id: animated;
36 | width:framewidth ;
37 | height: frameheight;
38 | source: btnurl;
39 | frameWidth:framewidth;
40 | frameHeight: frameheight;
41 | frameDuration: frameduration;
42 | frameCount: framecount;
43 | frameX: 0;
44 | frameY: 0;
45 | currentFrame: 0
46 | onCurrentFrameChanged: {
47 | //console.log("%1/%2".arg(animated.currentFrame).arg(animated.frameCount));
48 | if(currentFrame == frameCount-1 ){
49 | console.log("已结动画完毕,请停止")
50 | animated.pause();
51 | animated.running = false;
52 | }
53 | }
54 | Component.onCompleted: {
55 | running = false;
56 | }
57 | }
58 | DDText{
59 | id:txtId
60 | text: btmTitle
61 | width: parent.width
62 | height: 30
63 | anchors.bottom: parent.bottom
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/360/common/CustomButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 |
3 | Item{
4 | id:closeBtn
5 |
6 | property bool hasMouse: false
7 | property int framewidth: 35
8 | property int frameheight: 24
9 | property int framecount: 4
10 | property url btnurl: "qrc:/images/360/main/close.png"
11 | property int clickType: 0
12 | signal signalClickedBtn(int clicktype); //0 close 1:min 2:menu 3:feedback
13 | clip: true
14 |
15 | width: framewidth
16 | height: frameheight
17 | MouseArea{
18 | id:ma
19 | anchors.fill: closeBtn
20 | hoverEnabled: true
21 | onClicked: {
22 | signalClickedBtn(clickType);
23 | animated.running = true;
24 | animated.currentFrame = 2
25 | animated.pause();
26 | animated.running = false;
27 | }
28 | onEntered: {
29 | animated.running = true;
30 | closeBtn.hasMouse = true;
31 | animated.currentFrame = 1
32 | animated.pause();
33 | animated.running = false;
34 | }
35 | onExited: {
36 | closeBtn.hasMouse = false;
37 | animated.running = true;
38 | animated.currentFrame = 0
39 | animated.pause();
40 | animated.running = false;
41 | }
42 | }
43 | AnimatedSprite {
44 | id: animated;
45 | anchors.fill: parent
46 | running:true
47 | source: btnurl;
48 | currentFrame: 0
49 | frameWidth: framewidth;
50 | frameHeight: frameHeight;
51 | frameDuration: 400;
52 | frameCount: framecount;
53 | frameX: 0;
54 | frameY: 0;
55 | visible: true
56 | Component.onCompleted: {
57 | animated.pause();
58 | animated.running = false;
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/360/common/CustomProgressBar.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.3
2 | import QtQuick.Controls.Styles 1.2
3 | import QtGraphicalEffects 1.0
4 |
5 | ProgressBarStyle{
6 | property color outerbordercolor: control.value<=0.8? "#FFE655" :"#B2FF77"
7 | // property color innerbordercolor: "#B2FF77"
8 | // property color conicalcolor: "red"
9 |
10 | panel : Rectangle
11 | {
12 | color: "transparent"
13 | implicitWidth: 80
14 | implicitHeight: implicitWidth
15 |
16 | Rectangle
17 | {
18 | id: outerRing
19 | z: 0
20 | anchors.fill: parent
21 | radius: Math.max(width, height) / 2
22 | color: "transparent"
23 | border.color: outerbordercolor
24 | border.width: 4
25 | }
26 |
27 | Rectangle
28 | {
29 | id: innerRing
30 | z: 1
31 | anchors.fill: parent
32 | anchors.margins: (outerRing.border.width - border.width) / 2
33 | radius: outerRing.radius
34 | color: "transparent"
35 | border.color: outerbordercolor
36 | border.width: 1
37 |
38 | ConicalGradient
39 | {
40 | source: innerRing
41 | anchors.fill: parent
42 | gradient: Gradient
43 | {
44 | GradientStop { position: 0.00; color: outerbordercolor }
45 | GradientStop { position: control.value; color: outerbordercolor }
46 | GradientStop { position: control.value + 0.01; color: "transparent" }
47 | GradientStop { position: 1.00; color: "transparent" }
48 | }
49 | }
50 | }
51 |
52 | DDText
53 | {
54 | id: progressLabel
55 | anchors.centerIn: parent
56 | color: "white"
57 | text: (control.value * 100).toFixed()
58 | font.pixelSize: 66
59 | font.family: "Comic Sans MS"
60 | DDText
61 | {
62 | id: scoreTxt
63 | anchors.left: parent.right
64 | anchors.bottom: parent.bottom
65 | color: "white"
66 | text:"分"
67 | font.pixelSize: 14
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/360/common/DDImage.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | Image {
4 | smooth: true
5 | }
6 |
--------------------------------------------------------------------------------
/360/common/DDText.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "../../youzan/youzan.js" as YSTHEME
3 |
4 | Text {
5 | font.family: YSTHEME.textfontfamily
6 | color:YSTHEME.textBlackColor
7 | font.pixelSize: YSTHEME.textFontSize
8 | horizontalAlignment: Text.AlignHCenter
9 | verticalAlignment: Text.AlignVCenter
10 | }
11 |
--------------------------------------------------------------------------------
/360/common/SigleButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 |
3 | Item{
4 | id:closeBtn
5 | width: txtId.width
6 | height: btnImg.height+txtId.height+6
7 | property int hasMouse: 0
8 | property bool reallysigle: false
9 | property url btnurl: "qrc:/images/360/main/security_safe_"
10 | property string btmTitle: "电脑清理"
11 | property color txtColor: "white"
12 | signal signalCloseApp();
13 | MouseArea{
14 | id:ma
15 | anchors.fill: closeBtn
16 | hoverEnabled: true
17 | onClicked: {
18 | closeBtn.hasMouse = 2;
19 | signalCloseApp();
20 | }
21 | onEntered: {
22 | closeBtn.hasMouse = 1;
23 | }
24 | onExited: {
25 | closeBtn.hasMouse = 0;
26 | }
27 | }
28 | DDImage{
29 | id: btnImg
30 | width: sourceSize.width
31 | height: sourceSize.height
32 | anchors.horizontalCenter: parent.horizontalCenter
33 | source: btnurl+getimgurl();
34 | opacity: !hasMouse?0.8:1
35 | }
36 | DDText{
37 | id:txtId
38 | text: btmTitle
39 | height: 20
40 | color: txtColor
41 | font.pixelSize: 12
42 | width: reallysigle?btnImg.sourceSize.width:paintedWidth
43 | anchors.bottom: parent.bottom
44 | }
45 |
46 | function getimgurl(){
47 | if(reallysigle)return "";
48 | return hasMouse==0?"normal.png":(hasMouse==1)?"hover.png":"press.png"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/360/common/Win10Setting.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | Item {
4 | id:root
5 | property string mainTitle: "Win10设置"
6 | property string subTitle: "一键助您顺畅驾驭Win10"
7 | Column{
8 | anchors.right:win10Img.left
9 | anchors.rightMargin: 2
10 | anchors.top: parent.top
11 | anchors.topMargin: 12
12 | height: parent.height
13 | spacing: 2
14 |
15 | DDText{
16 | id:mainTxt
17 | text: mainTitle
18 | width: root.width*3/4
19 | height: 18
20 | font.pixelSize: 12
21 | color: "black"
22 | font.letterSpacing: 2
23 | horizontalAlignment: Text.AlignRight
24 |
25 | }
26 |
27 | DDText{
28 | id:subTxt
29 | text:subTitle
30 | font.pixelSize: 12
31 | color: "grey"
32 | horizontalAlignment: Text.AlignRight
33 | width: root.width*3/4
34 | }
35 | }
36 | DDImage{
37 | id:win10Img
38 | source: "qrc:/images/360/main/win10.png"
39 | anchors.right: parent.right
40 | height: sourceSize.height
41 | anchors.verticalCenter: parent.verticalCenter
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/360logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/360logo.ico
--------------------------------------------------------------------------------
/Driver/BDTableView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.2
4 |
5 | TableView {
6 | id:roowView
7 | property var comList: [1,2,3,4,5,6,7]
8 | property int scrollbarWidth : 10
9 | itemDelegate: Item {
10 | function isCheckColumn( columnIndex )
11 | {
12 | return roowView.getColumn( columnIndex ) === checkedColumn
13 | }
14 | function isComBoxColumn( columnIndex )
15 | {
16 | return roowView.getColumn( columnIndex ) === comBoxId
17 | }
18 | function isCanShow(columnIndex){
19 | return isCheckColumn(columnIndex) || isComBoxColumn(columnIndex)
20 | }
21 |
22 | CheckBox
23 | {
24 | anchors.centerIn: parent
25 | checked: styleData.value
26 | visible: isCheckColumn( styleData.column )
27 | style: CheckBoxStyle {
28 | indicator: Rectangle {
29 | implicitWidth: 14
30 | implicitHeight: 14
31 | radius: 2
32 | border.color: control.activeFocus ? "darkblue" : "gray"
33 | border.width: 1
34 | Rectangle {
35 | visible: control.checked
36 | color: "#555"
37 | border.color: "#333"
38 | radius: 1
39 | anchors.margins: 2
40 | anchors.fill: parent
41 | }
42 | }
43 | }
44 | }
45 | ComboBox
46 | {
47 | anchors.centerIn: parent
48 | width: 80
49 | model: comList
50 | visible: isComBoxColumn( styleData.column )
51 | }
52 | Text {
53 | anchors.fill: parent
54 | color: (styleData.selected)?"#d53d3d":"grey"
55 | elide: styleData.elideMode
56 | text: !isCanShow( styleData.column )?styleData.value:""
57 | font.family: "微软雅黑"
58 | font.pixelSize: 14
59 | horizontalAlignment: Text.AlignHCenter
60 | verticalAlignment: Text.AlignVCenter
61 | visible:( !isCanShow( styleData.column))
62 | }
63 |
64 | }
65 | rowDelegate: Rectangle{
66 | height: styleData.selected?40:36
67 | border.width: styleData.selected?2:0
68 | border.color: styleData.selected?"red":"grey"
69 | }
70 | headerDelegate: Rectangle{
71 | Text {
72 | anchors.fill: parent
73 | text: styleData.value
74 | font.family: "微软雅黑"
75 | color:"#d53d3d"
76 | horizontalAlignment: Text.AlignHCenter
77 | verticalAlignment: Text.AlignVCenter
78 | font.pixelSize: 18
79 | font.bold: true
80 | }
81 | height: 40
82 | border.width: 1
83 | border.color:"grey"
84 | }
85 | style : ScrollViewStyle{
86 | scrollBarBackground : Item {
87 | implicitWidth: roowView.scrollbarWidth
88 | implicitHeight: roowView.scrollbarWidth
89 | visible : true
90 | Rectangle {
91 | anchors.fill: parent
92 | color: "transparent"
93 | border.color: "transparent"
94 | anchors.rightMargin: styleData.horizontal ? -2 : -1
95 | anchors.leftMargin: styleData.horizontal ? -2 : 0
96 | anchors.topMargin: styleData.horizontal ? 0 : -2
97 | anchors.bottomMargin: styleData.horizontal ? -1 : -2
98 | }
99 |
100 | }
101 | handle: Rectangle{
102 | id : theRect
103 | opacity: 0.8
104 | implicitWidth: styleData.horizontal ? 66 : roowView.scrollbarWidth
105 | implicitHeight: styleData.horizontal ? roowView.scrollbarWidth : 66
106 | color : "#232323"
107 | radius : roowView.scrollbarWidth
108 | border.width: 1
109 | border.color: "#333333"
110 | states: [
111 | State {
112 | name: "clicked"
113 | when : styleData.pressed
114 | PropertyChanges {target: theRect; opacity : 1}
115 | },
116 | State{
117 | name: "hovered"
118 | when : styleData.hovered
119 | PropertyChanges {target: theRect; opacity : 0.6}
120 | }
121 |
122 | ]
123 | transitions: Transition {
124 | PropertyAnimation { properties: "opacity"; easing.type: Easing.InOutQuad; duration: 500 }
125 | }
126 | }
127 | incrementControl: Rectangle {
128 | visible : false
129 | implicitWidth: 0
130 | implicitHeight: 0
131 | color : "blue"
132 | }
133 | decrementControl: Rectangle {
134 | visible : false
135 | implicitWidth: 0
136 | implicitHeight: 40
137 | color : "blue"
138 | }
139 | corner: Rectangle { color: "transparent";visible : false }
140 | }
141 |
142 | TableViewColumn {
143 | id:checkedColumn
144 | role: "checked"
145 | title: "勾选"
146 | width: roowView.width/8
147 | }
148 | TableViewColumn {
149 | id:comBoxId
150 | role: "comboLst"
151 | title: "下拉列表"
152 | width: roowView.width/8
153 | }
154 | TableViewColumn {
155 | role: "dessert"
156 | title: "文字内容"
157 | width: roowView.width/8
158 | }
159 | TableViewColumn {
160 | role: "dbtype"
161 | title: "文字类型"
162 | width: roowView.width/4
163 | }
164 | TableViewColumn {
165 | role: "flat"
166 | title: "文字样式"
167 | width: roowView.width/4
168 | }
169 | TableViewColumn {
170 | role: "carbs"
171 | title: "文字苦"
172 | width: roowView.width/4
173 | }
174 | model: mTableModel
175 | function createObj(col){
176 | var newObject = Qt.createQmlObject('import QtQuick 2.0; Rectangle {color: "red"; width: 20; height: 20}',
177 | parentItem,
178 | "dynamicSnippet1");
179 | }
180 | }
181 |
--------------------------------------------------------------------------------
/Driver/DDDriverView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 | import QtQuick.Window 2.1
3 | import "../ddui" as DDui
4 |
5 | DDui.DDAbstractView {
6 | id:driverUi
7 | visible: true
8 | width: 860
9 | height: 600
10 | DDui.DDuiShadowBg{
11 | id:bg
12 | width: driverUi.width
13 | height: driverUi.height
14 | bgmarigns: driverUi.bgMarign
15 | DDui.DDSplitView {
16 | id:midView
17 | anchors.fill: parent
18 | anchors.margins: driverUi.bgMarign
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Driver/DDDynamicTable.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 | import QtQuick.Controls 1.2
3 | Item{
4 | Component
5 | {
6 | id: columnComponent
7 | TableViewColumn{width: 100 }
8 | }
9 |
10 | TableView {
11 | id: view
12 | anchors.fill: parent
13 | itemDelegate: Item {
14 | Text {
15 | anchors.fill: parent
16 | color: (styleData.selected)?"#d53d3d":"grey"
17 | elide: styleData.elideMode
18 | text: styleData.value
19 | font.family: "微软雅黑"
20 | font.pixelSize: 14
21 | horizontalAlignment: Text.AlignHCenter
22 | verticalAlignment: Text.AlignVCenter
23 | }
24 |
25 | }
26 | rowDelegate: Rectangle{
27 | height: styleData.selected?40:36
28 | border.width: styleData.selected?2:0
29 | border.color: styleData.selected?"red":"grey"
30 | }
31 | headerDelegate: Rectangle{
32 | Text {
33 | anchors.fill: parent
34 | text: styleData.value
35 | font.family: "微软雅黑"
36 | color:"#d53d3d"
37 | horizontalAlignment: Text.AlignHCenter
38 | verticalAlignment: Text.AlignVCenter
39 | font.pixelSize: 18
40 | font.bold: true
41 | }
42 | height: 40
43 | border.width: 1
44 | border.color:"grey"
45 | }
46 | resources:
47 | {
48 | var roleList = mMyModel.userRoleNames();
49 | console.log("aslkkkkkkkkkkkkkkkkkk "+roleList.length);
50 | var temp = []
51 | for(var i=0; i b) ? 1 / a : 1 / b;
17 | context.beginPath();
18 | context.moveTo(x + a, y);
19 | for(var i = 0; i < 2 * Math.PI; i += step) {
20 | context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i));
21 | }
22 | context.closePath();
23 | context.fill();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/READMe.md:
--------------------------------------------------------------------------------
1 | # (20180408持续更新)基于QtQuick2.0开发的诸多漂亮的界面例子(作为入门首选)
2 | 
3 | 
4 | 
5 | 
6 | 
7 | 
8 | ## 客户端
9 |
10 | ### 使用QtQuick技术开发酷炫的客户端
11 |
12 | * 使用QML开发客户端界面
13 | * 模仿驱动精灵界面(待完善)
14 | * 模仿QQ界面(待开发)
15 | * 模仿迅雷设置皮肤界面(待完善)
16 | * 支持窗口拉伸且可以设置停靠属性
17 | * 新增QML与C++交换的接口
18 | * 新增有赞商城API接口和界面 (需要自己申请有赞api的key等)
19 | * 新增自定义日历选择功能
20 | * 新增打印有赞商城订单功能
21 | * 刷新订单功能
22 | * 新增二维码生成接口(可以参考我的另外的项目[二维码生成器](https://github.com/toby20130333/qtquickqrencode))
23 | * 新增360安全界面模仿
24 | * 集成各个页面
25 | * 加入系统托盘功能
26 | * 新增数字雨效果
27 |
28 | ## 憧憬
29 |
30 | * 实现国内针对QtQuick最新信息的更新和传播
31 | * 扩大QtQuick在移动开发领域的知名度
32 | * 兼容各个主流平台的开发
33 | * 为自身的App打下基石
34 |
35 |
36 | ## 贡献
37 |
38 | * [寒山-居士](https://github.com/toby20130333)
39 | * [toby520](http://www.heilqt.com)
40 |
41 |
42 | ## 注意事项
43 |
44 | * 该项目Qt5.3-Qt5.7编译通过
45 | * 所有图片资源归360奇虎公司所有,请勿商用
46 | * 目前修改子项目加载方式:pro文件的DEFINES += USE_YOUZAN 你可以改成其他子项目的,具体参考main.cpp代码
47 | * 有任何QtQuick相关的问题可以到[QtQuick论坛](http://www.heilqt.com)进行提问或者加入网站底部的QQ群
48 | * 例子有多个demo,自行切换main.cpp的加载qml的路径
49 | * 例子中涉及到图片资源,请自行提供(涉及到图片版权问题)
50 | * 例子中的qml加载路径是相对路径,为了方便调试,请注意不要使用[影子构建](http://www.cnblogs.com/menlsh/archive/2012/07/30/2615974.html)
51 |
--------------------------------------------------------------------------------
/XunLei/DDXunGridView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.XmlListModel 2.0
3 |
4 | Item {
5 | width: 300; height: 200
6 | property XmlListModel curModel
7 | signal signalBtnClicked(string skinId);
8 | Component {
9 | id: contactDelegate
10 | Item {
11 | id:imgItem
12 | width: grid.cellWidth;
13 | height: grid.cellHeight
14 | property string packageid: packageId
15 | Image {
16 | id:itemImg;
17 | source: "Online/"+thumbnail;
18 | anchors.fill: parent
19 | anchors.margins: 2
20 | anchors.horizontalCenter: parent.horizontalCenter
21 | }
22 | MouseArea{
23 | id:ma
24 | anchors.fill: imgItem
25 | hoverEnabled: true
26 | onClicked: {
27 | signalBtnClicked(packageId);
28 | }
29 | onEntered: {
30 | if (itemImg.status == Image.Ready)rectBg.opacity=0.8;
31 | }
32 | onExited: {
33 | rectBg.opacity=0.0;
34 | }
35 | }
36 | Rectangle{
37 | id:rectBg
38 | color: "#66656A"
39 | width: itemImg.width;
40 | height: itemImg.height
41 | anchors.centerIn: parent
42 | opacity: 0
43 | Text {
44 | id: btntext
45 | width: grid.cellWidth;
46 | height: itemImg.height/4
47 | text: skinname
48 | visible: (rectBg.opacity==0.8)
49 | anchors.top: rectBg.top
50 | anchors.topMargin: rectBg.height/4
51 | horizontalAlignment: Text.AlignHCenter
52 | verticalAlignment: Text.AlignVCenter
53 | color: "white"
54 | font.pixelSize: 12
55 | renderType: Text.NativeRendering
56 | }
57 | Text {
58 | id: popTxt
59 | width: grid.cellWidth;
60 | height: itemImg.height/4
61 | text: "人气:"+popularity
62 | visible: btntext.visible
63 | renderType: Text.NativeRendering
64 | anchors.top: btntext.bottom
65 | anchors.topMargin: rectBg.height/6
66 | horizontalAlignment: Text.AlignHCenter
67 | verticalAlignment: Text.AlignVCenter
68 | color: "white"
69 | font.pixelSize: 12
70 | }
71 | }
72 | }
73 | }
74 | GridView {
75 | id: grid
76 | anchors.fill: parent
77 | cellWidth: 130;//parent.width/4;
78 | cellHeight: 70
79 | model: curModel
80 | delegate: contactDelegate
81 | focus: true
82 | clip: true
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/XunLei/DDXunLei.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Window 2.1
3 | import "../ddui" as DDui
4 |
5 | DDui.DDAbstractView {
6 | id:xunLei
7 | width: 462
8 | height: 350
9 | DDui. DDuiShadowBg{
10 | id:bg
11 | width: xunLei.width
12 | height: xunLei.height
13 | bgmarigns:8
14 | BorderImage {
15 | id: bgImage
16 | source: "Online/x_518207e66afcbtk.jpg"
17 | anchors.fill: parent
18 | anchors.margins:bg.bgmarigns
19 | DDXunView{
20 | id:view
21 | anchors.fill: parent
22 | }
23 | DDui.DDCloseButton{
24 | id:close
25 | width: 32
26 | height: width
27 | anchors.top: parent.top
28 | anchors.right: parent.right
29 | onSignalCloseApp: {
30 | signalQmlOptions("close app","system");
31 | }
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/XunLei/DDXunLocalView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.XmlListModel 2.0
3 |
4 | Item {
5 | width: 300; height: 200
6 | property XmlListModel curModel
7 | signal signalBtnClicked(string skinId);
8 | Component {
9 | id: contactDelegate
10 | Item {
11 | id:imgItem
12 | width: grid.cellWidth;
13 | height: grid.cellHeight
14 | property string packageid: packageId
15 | Image {
16 | id:itemImg;
17 | source: "Online/"+thumbnail;
18 | anchors.fill: parent
19 | anchors.margins: 2
20 | anchors.horizontalCenter: parent.horizontalCenter
21 | }
22 | MouseArea{
23 | id:ma
24 | anchors.fill: imgItem
25 | hoverEnabled: true
26 | onClicked: {
27 | signalBtnClicked(packageId);
28 | }
29 | onEntered: {
30 | if (itemImg.status == Image.Ready)rectBg.opacity=0.8;
31 | }
32 | onExited: {
33 | rectBg.opacity=0.0;
34 | }
35 | }
36 | Rectangle{
37 | id:rectBg
38 | color: "#66656A"
39 | width: itemImg.width;
40 | height: itemImg.height/4
41 | anchors.horizontalCenter: parent.horizontalCenter
42 | anchors.bottom: itemImg.bottom
43 | opacity: 0
44 | Text {
45 | id: btntext
46 | width: grid.cellWidth/2;
47 | height: rectBg.height
48 | text: "Del"
49 | visible: (rectBg.opacity==0.8)
50 | anchors.left: rectBg.left
51 | anchors.leftMargin: 4
52 | horizontalAlignment: Text.AlignLeft
53 | verticalAlignment: Text.AlignVCenter
54 | color: "white"
55 | font.pixelSize: 12
56 | renderType: Text.NativeRendering
57 | }
58 | Text {
59 | id: popTxt
60 | width: grid.cellWidth/2;
61 | height: rectBg.height
62 | text: popularity
63 | visible: btntext.visible
64 | renderType: Text.NativeRendering
65 | anchors.right: rectBg.right
66 | anchors.rightMargin: 4
67 | horizontalAlignment: Text.AlignRight
68 | verticalAlignment: Text.AlignVCenter
69 | color: "white"
70 | font.pixelSize: 12
71 | }
72 | }
73 | }
74 | }
75 | GridView {
76 | id: grid
77 | anchors.fill: parent
78 | cellWidth: 130;//parent.width/4;
79 | cellHeight: 70
80 | model: curModel
81 | delegate: contactDelegate
82 | focus: true
83 | clip: true
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/XunLei/DDXunView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.2
4 | import QtQuick.XmlListModel 2.0
5 |
6 |
7 | TabView {
8 | id: tabView
9 | anchors.fill: parent
10 | anchors.margins: 8
11 | XmlListModel {
12 | id: xmlModel
13 | source: "Online/online.xml"
14 | query: "/thunder_skin/group/package"
15 | XmlRole { name: "skinname"; query: "name/string()" }
16 | XmlRole { name: "thumbnail"; query: "thumbnail/string()" }
17 | XmlRole { name: "popularity"; query: "popularity/string()" }
18 | XmlRole { name: "dynamic"; query: "dynamic/string()" }
19 | XmlRole { name:"packageId";query:"@id/string()"}
20 |
21 | Component.onCompleted: {
22 | console.log("xmlModel "+xmlModel.count)
23 | }
24 | }
25 | XmlListModel {
26 | id: xmlModelLocal
27 | source: "Online/local.xml"
28 | query: "/thunder_skin/group/package"
29 | XmlRole { name: "skinname"; query: "name/string()" }
30 | XmlRole { name: "thumbnail"; query: "thumbnail/string()" }
31 | XmlRole { name: "popularity"; query: "popularity/string()" }
32 | XmlRole { name: "dynamic"; query: "dynamic/string()" }
33 | XmlRole { name:"packageId";query:"@id/string()"}
34 |
35 | Component.onCompleted: {
36 | console.log("xmlModel "+xmlModel.count)
37 | }
38 | }
39 | Tab {
40 | title: "在线皮肤"
41 | DDXunGridView{
42 | id:onLine
43 | curModel: xmlModel
44 | onSignalBtnClicked: {
45 | console.log("clicked ID "+skinId)
46 | }
47 | }
48 | }
49 | Tab {
50 | title: "我的皮肤"
51 | DDXunLocalView{
52 | id:localView
53 | curModel: xmlModelLocal
54 | }
55 | }
56 | style: TabViewStyle {
57 | property color frameColor: "#85C583"
58 | property color fillColor: "#eee"
59 | property color bgColor: "#00ffffff"
60 | frameOverlap: 1
61 | frame: Rectangle {
62 | color: "#F2F9F2"
63 | }
64 | tab: Rectangle {
65 | color: styleData.selected ? fillColor : bgColor
66 | implicitWidth: Math.max(text.width + 24, 80)
67 | implicitHeight: styleData.selected ?30:28
68 | opacity: styleData.selected?1:0.6
69 | Rectangle { height: 1 ; width: parent.width ; color: frameColor}
70 | Rectangle { height: parent.height ; width: 1; color: frameColor}
71 | Rectangle { x: parent.width -1; height: parent.height ; width: 1; color: frameColor}
72 | Text {
73 | id: text
74 | anchors.horizontalCenter: parent.horizontalCenter
75 | anchors.verticalCenter: parent.verticalCenter
76 | width: text.paintedWidth
77 | horizontalAlignment: Text.AlignHCenter
78 | verticalAlignment: Text.AlignVCenter
79 | text: styleData.title
80 | color: styleData.selected ? "black" : "gray"
81 | }
82 | Rectangle {
83 | anchors.right: parent.right
84 | anchors.verticalCenter: parent.verticalCenter
85 | anchors.rightMargin: 4
86 | implicitWidth: 16
87 | implicitHeight: 16
88 | radius: width/2
89 | color: control.hovered ? "#eee": "#00ffffff"
90 | border.color: control.hovered ?"gray":"#00ffffff"
91 | MouseArea {
92 | anchors.fill: parent
93 | hoverEnabled: true
94 | onEntered: {
95 | }
96 | onExited: {
97 | }
98 | }
99 | }
100 | }
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/XunLei/Online/local.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 彩虹上的热气球
5 | 20150428113037_热气球9.thunderskin
6 | x_55544bb05575dab.jpg
7 | 1211
8 | 0
9 |
10 |
11 | 蓝天白云草原
12 | 20150318160552_离离原上草7.thunderskin
13 | x_550931a00fe45bw.jpg
14 | 1232
15 | 0
16 |
17 |
18 | 春日花恋
19 | 20150303152556_春日花恋7.thunderskin
20 | x_54f562120fc28xr.jpg
21 | 1989
22 | 0
23 |
24 |
25 | 雪人
26 | 20150127150247_雪人7.thunderskin
27 | x_54c7381df0cb6mu.jpg
28 | 1948
29 | 0
30 |
31 |
32 | 雪山之美
33 | 20141231163107_雪山7.thunderskin
34 | x_54a3b45d38b60uj.jpg
35 | 1754
36 | 0
37 |
38 |
39 | 向阳而立
40 | 20141125182351_向阳而立9.thunderskin
41 | x_5474592312f97rk.jpg
42 | 1774
43 | 0
44 |
45 |
46 | 静若秋泓
47 | 20141016181401_静若秋泓9.thunderskin
48 | x_543f9a8362badmk.jpg
49 | 1985
50 | 0
51 |
52 |
53 | 睡莲
54 | 20140904163451_睡莲7.thunderskin
55 | x_540824449f123qt.jpg
56 | 1543
57 | 0
58 |
59 |
60 | 倒挂金钟花
61 | 20140916145122_倒挂金钟花9.thunderskin
62 | x_5417de0298137vb.jpg
63 | 1343
64 | 0
65 |
66 |
67 | 夕阳海景
68 | 20140715183357_夕阳海景79.thunderskin
69 | x_53c503a47bad4nr.jpg
70 | 1999
71 | 0
72 |
73 |
74 | 生如夏花
75 | 20130812142049_生如夏花.thunderskin
76 | x_52087ed75ab61du.jpg
77 | 1842
78 | 0
79 |
80 |
81 | 海鸥与海
82 | 20140221140744_海鸥与海.thunderskin
83 | x_5306ed3f791cbfo.jpg
84 | 1874
85 | 0
86 |
87 |
88 | 草莓情人
89 | 20140212143912_草莓情人.thunderskin
90 | x_52fb171f696e5ft.jpg
91 | 1753
92 | 0
93 |
94 |
95 | 恍然如梦
96 | 20140220172724_恍然如梦.thunderskin
97 | x_5305ca89d7e45gt.jpg
98 | 1528
99 | 0
100 |
101 |
102 | 荷韵
103 | 20140227135418_荷韵.thunderskin
104 | x_53141cd50efcced.jpg
105 | 1698
106 | 0
107 |
108 |
109 | 阴天
110 | 20140226155351_阴天.thunderskin
111 | x_530d9dace27ddag.jpg
112 | 1687
113 | 0
114 |
115 |
116 | 绿色心情
117 | 20140219152633_绿色心情9.thunderskin
118 | x_53045995d848fna.jpg
119 | 1989
120 | 0
121 |
122 |
123 | 小镇湖边
124 | 20140219151730_小镇湖边.thunderskin
125 | x_53045a99b13e3qv.jpg
126 | 1932
127 | 0
128 |
129 |
130 | 又见花开
131 | 20140217141208_又见花开.thunderskin
132 | x_5301a844932edje.jpg
133 | 1693
134 | 0
135 |
136 |
137 | 北岛含光-新西兰
138 | 20140211180650_%E5%8C%97%E5%B2%9B%E5%90%AB%E5%85%89-%E6%96%B0%E8%A5%BF%E5%85%B0.thunderskin
139 | x_52f9f65a05472uu.jpg
140 | 1226
141 | 0
142 |
143 |
144 | 叶的眼泪
145 | 20140210163235_%E5%8F%B6%E7%9A%84%E7%9C%BC%E6%B3%AA9.thunderskin
146 | x_52f88eb368486ev.jpg
147 | 1265
148 | 0
149 |
150 |
151 | 动人春色不须多
152 | 20140210154354_动人春色不须多.thunderskin
153 | x_52f88358af1a4ag.jpg
154 | 1874
155 | 0
156 |
157 |
158 | 为你倾城
159 | 20140207114120_为你倾城.thunderskin
160 | x_52f455ee5c8c3cr.jpg
161 | 1574
162 | 0
163 |
164 |
165 | 春日迟迟
166 | 20140125111031_春日迟迟.thunderskin
167 | x_52e32b36457bchn.jpg
168 | 1978
169 | 0
170 |
171 |
172 | 繁花似锦迎新春
173 | 20140124142220_繁花似锦迎新春.thunderskin
174 | x_52e206abf0283ky.jpg
175 | 1845
176 | 0
177 |
178 |
179 | 为你绽放
180 | 20140120161523_为你绽放.thunderskin
181 | x_52dcdb30a2a6bpy.jpg
182 | 1384
183 | 0
184 |
185 |
186 | 落叶,道不尽的忧伤
187 | 20140117141127_落叶,道不尽的忧伤.thunderskin
188 | x_52d8c99ca4e98mk.jpg
189 | 1398
190 | 0
191 |
192 |
193 | 红果霜花
194 | 20140116153231_红果霜花.thunderskin
195 | x_52d78b1d20393ha.jpg
196 | 1924
197 | 0
198 |
199 |
200 | 秋山野果
201 | 20140114154601_秋山野果.thunderskin
202 | x_52d4eb45e485crr.jpg
203 | 1684
204 | 0
205 |
206 |
207 | 单车碾过的岁月
208 | 20131024144547_单车碾过的岁月.thunderskin
209 | x_5268c2a8dd5e5gn.jpg
210 | 1987
211 | 0
212 |
213 |
214 | 叶的进行曲
215 | 20130925162215_%E5%8F%B6%E7%9A%84%E5%85%89%E5%BD%B1%E6%9B%B2.thunderskin
216 | x_52429d8fc0072su.jpg
217 | 1632
218 | 0
219 |
220 |
221 | 搁浅的纸船
222 | 20131017144802_搁浅的纸船.thunderskin
223 | x_525f88381a2f0qk.jpg
224 | 1933
225 | 0
226 |
227 |
228 | 秋天的雾
229 | 20131014173254_%E7%A7%8B%E5%A4%A9%E7%9A%84%E9%9B%BE.thunderskin
230 | x_525bbbe3ba037ss.jpg
231 | 1634
232 | 0
233 |
234 |
235 | 花季末了
236 | 20130913154436_花季末了.thunderskin
237 | x_5232c27da308evt.jpg
238 | 1945
239 | 0
240 |
241 |
242 | 岁月静好
243 | 20130909151523_岁月静好.thunderskin
244 | x_522d759eaa4a6zj.jpg
245 | 1911
246 | 0
247 |
248 |
249 | 带笑红玫瑰
250 | 20130905141906_带笑红玫瑰.thunderskin
251 | x_5228226adf64bdg.jpg
252 | 1874
253 | 0
254 |
255 |
256 | 载梦远行
257 | 20131113135650_载梦远行.thunderskin
258 | x_528314b5626e2ug.jpg
259 | 1474
260 | 0
261 |
262 |
263 | 黎明前的破晓
264 | 20130820143130_黎明前的破晓.thunderskin
265 | x_52130d607672akl.jpg
266 | 1887
267 | 0
268 |
269 |
270 | 花与时光
271 | 20130809183707_%E8%8A%B1%E4%B8%8E%E6%97%B6%E5%85%89.thunderskin
272 | x_5204c66e2decdom.jpg
273 | 1409
274 | 0
275 |
276 |
277 | Dream Tree
278 | 20130726175538_Dream%20Tree.thunderskin
279 | x_51f247b405e2eyf.jpg
280 | 1856
281 | 0
282 |
283 |
284 | 蒲公英
285 | 20130718195232_%E8%92%B2%E5%85%AC%E8%8B%B1.thunderskin
286 | x_51e7d71219846hj.jpg
287 | 1888
288 | 0
289 |
290 |
291 | 火车的时光漫游
292 | 20131120142722_火车的时光漫游.thunderskin
293 | x_528c565e6dc98uk.jpg
294 | 1542
295 | 0
296 |
297 |
298 | 护眼一刻
299 | 20130418153656_护眼一刻.thunderskin
300 | x_516fa2bc5a152pq.jpg
301 | 1628
302 | 0
303 |
304 |
305 | 摩天轮的独白
306 | 20131205142043_摩天轮的独白.thunderskin
307 | x_52a01b6743dbacp.jpg
308 | 1574
309 | 0
310 |
311 |
312 | 误入桃花源
313 | 20131115160428_%E8%AF%AF%E5%85%A5%E7%90%BC%E5%8F%B0%E6%B7%B1%E5%A4%849.thunderskin
314 | x_5285d5a2a34dcyw.jpg
315 | 1600
316 | 0
317 |
318 |
319 | 柠檬庄园
320 | 20131209174025_%E6%9F%A0%E6%AA%AC.thunderskin
321 | x_52a5911831f85ib.jpg
322 | 1472
323 | 0
324 |
325 |
326 | 梦の仙境
327 | 20130313175413_%E6%A2%A6%E3%81%AE%E4%BB%99%E5%A2%83.thunderskin
328 | x_51404ce191d0dnt.jpg
329 | 1720
330 | 0
331 |
332 |
333 | 茉莉花儿
334 | 20130225143144_茉莉花儿.thunderskin
335 | x_512b05645031eev.jpg
336 | 1811
337 | 0
338 |
339 |
340 | 梨花添暖意
341 | 20130206163458_梨花添暖春.thunderskin
342 | 20130206163555KYCLQ.jpg
343 | 1818
344 | 0
345 |
346 |
347 | 花中西施
348 | 20130202141107_花中西施.thunderskin
349 | 20130202141206NUBXN.jpg
350 | 1855
351 | 0
352 |
353 |
354 | 红加仑
355 | 20131220103348_红加仑.thunderskin
356 | x_52b3aca161655vz.jpg
357 | 1374
358 | 0
359 |
360 |
361 | 小菊也清新
362 | 20130205152641_非洲菊.thunderskin
363 | 20130205152714FNDZO.jpg
364 | 1911
365 | 0
366 |
367 |
368 | 春色满园
369 | 20130201144939_一抹春意.thunderskin
370 | 20130201144959XGJWJ.jpg
371 | 1697
372 | 0
373 |
374 |
375 | 那些花儿
376 | 那些花儿.thunderskin
377 | 20130130153601NLPMC.jpg
378 | 1987
379 | 0
380 |
381 |
382 | 秋菊有佳色
383 | 秋菊有佳色.thunderskin
384 | 20130128155925KUZNU.jpg
385 | 1698
386 | 0
387 |
388 |
389 | 桃花春色
390 | 桃花春色.thunderskin
391 | 20130122172545PEWKM.jpg
392 | 1880
393 | 0
394 |
395 |
396 | 雪压枝头白絮飞
397 | 20140109143927_雪压枝头白絮飞.thunderskin
398 | x_52ce444612a0aus.jpg
399 | 1564
400 | 0
401 |
402 |
403 | 梦里秋千
404 | 20131230143453_梦里秋千.thunderskin
405 | x_52c1141b9a417eg.jpg
406 | 1578
407 | 0
408 |
409 |
410 | 金钱草
411 | 20131217151525_金钱草.thunderskin
412 | x_52affa23f1b1enp.jpg
413 | 1478
414 | 0
415 |
416 |
417 | 篱笆外的虞美人
418 | 20131212144040_篱笆外的虞美人.thunderskin
419 | x_52a95a733bfeacp.jpg
420 | 1741
421 | 0
422 |
423 |
424 | 你说要有光
425 | 20131210172253_%E4%BD%A0%E8%AF%B4%E8%A6%81%E6%9C%89%E5%85%89.thunderskin
426 | x_52a6dd881c91fcx.jpg
427 | 1325
428 | 0
429 |
430 |
431 | 回忆覆盆子时光
432 | 20131209142833_回忆覆盆子时光.thunderskin
433 | x_52a563201a86eas.jpg
434 | 1541
435 | 0
436 |
437 |
438 | 星空下的马特峰
439 | 20131206161903_%E6%98%9F%E7%A9%BA%E4%B8%8B%E7%9A%84%E9%A9%AC%E7%89%B9%E5%B3%B0.thunderskin
440 | x_52a189cb647eblv.jpg
441 | 1064
442 | 0
443 |
444 |
445 | 给冬天取一个温暖的名字
446 | 20131121163211_%E7%BB%99%E5%86%AC%E5%A4%A9%E5%8F%96%E4%B8%80%E4%B8%AA%E6%B8%A9%E6%9A%96%E7%9A%84%E5%90%8D%E5%AD%97.thunderskin
447 | x_528dc53a1c4aeyj.jpg
448 | 1830
449 | 0
450 |
451 |
452 | 渐行渐远的橡皮鸭
453 | 20131203161006_渐行渐远的橡皮鸭.thunderskin
454 | x_529d91ec47f3dwg.jpg
455 | 1741
456 | 0
457 |
458 |
459 | 雪压枝头
460 | 20131202141835_雪压枝头.thunderskin
461 | x_529c264bc248edi.jpg
462 | 1541
463 | 0
464 |
465 |
466 | 篱笆墙的影子
467 | 20131125180458_%E7%AF%B1%E7%AC%86%E5%A2%99%E7%9A%84%E5%BD%B1%E5%AD%90.thunderskin
468 | x_529320da774b5zp.jpg
469 | 1310
470 | 0
471 |
472 |
473 | 游走城市
474 | 20131114141038_游走城市.thunderskin
475 | x_5284696e95251zz.jpg
476 | 1741
477 | 0
478 |
479 |
480 | 紫雾
481 | 20131111173131_%E7%B4%AB%E9%9B%BE.thunderskin
482 | x_5280a404c13bamr.jpg
483 | 1753
484 | 0
485 |
486 |
487 | 巷子深处有人家
488 | 20131108163258_%E5%B0%8F%E5%B7%B7%E5%BC%84%E5%BD%B1.thunderskin
489 | x_527ca1d6ef70das.jpg
490 | 1962
491 | 0
492 |
493 |
494 | 灯初上,夜未央
495 | 20131031151633_灯初上,夜未央.thunderskin
496 | x_527203e918122pn.jpg
497 | 1971
498 | 0
499 |
500 |
501 | 梦幻之旅
502 | 20131025161044_梦幻之旅.thunderskin
503 | x_526a27930bea8vb.jpg
504 | 1874
505 | 0
506 |
507 |
508 | 烛光熠熠
509 | 20131023153210_%E7%83%9B%E5%85%89%E7%86%A0%E7%86%A0.thunderskin
510 | x_52677ba998555xd.jpg
511 | 1676
512 | 0
513 |
514 |
515 | 枯萎亦美
516 | 20131022142048_枯萎亦美.thunderskin
517 | x_526619552b64dyt.jpg
518 | 1934
519 | 0
520 |
521 |
522 | 残荷
523 | 20131018161041_%E6%AE%8B%E8%8D%B7.thunderskin
524 | x_5260f008ed0c1ol.jpg
525 | 1740
526 | 0
527 |
528 |
529 | 羞怯的扶郎花
530 | 20131018144932_羞怯的扶郎花.thunderskin
531 | x_5260da0a6f16cdx.jpg
532 | 1654
533 | 0
534 |
535 |
536 | 晴天娃娃
537 | 20131011152323_晴天娃娃.thunderskin
538 | x_5257a7785dcb3av.jpg
539 | 1933
540 | 0
541 |
542 |
543 | 山花烂漫
544 | 20131008123716_山花烂漫.thunderskin
545 | x_52538c0942418qh.jpg
546 | 1876
547 | 0
548 |
549 |
550 | 葡萄诱惑
551 | 20130926171123_%E8%91%A1%E8%90%84%E8%AF%B1%E6%83%91.thunderskin
552 | x_5243fa628ed44zl.jpg
553 | 1630
554 | 0
555 |
556 |
557 | 玫瑰的忧伤
558 | 20130927145403_玫瑰的忧伤.thunderskin
559 | x_52452b98d9af3dy.jpg
560 | 1871
561 | 0
562 |
563 |
564 |
565 |
--------------------------------------------------------------------------------
/XunLei/Online/online.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 迷幻色彩
5 | http://skin.client.xunlei.com/7.9/20140924165734_迷幻色彩9.thunderskin
6 | x_542287894f171oo.jpg
7 | 1953
8 | 0
9 |
10 |
11 | 带上快乐去旅行
12 | http://skin.client.xunlei.com/7.9/20140924155331_国庆9.thunderskin
13 | x_5422788ed4eb6uu.jpg
14 | 1423
15 | 0
16 |
17 |
18 | 夏天的冰淇淋
19 | http://skin.client.xunlei.com/7.9/20140715181026_夏天的冰淇淋9.thunderskin
20 | x_53c4fde9bc26dym.jpg
21 | 1932
22 | 0
23 |
24 |
25 | 雷鸟来了
26 | http://skin.client.xunlei.com/7.9/20140718150239_雷鸟9.thunderskin
27 | x_53c8c6a1cc599qa.jpg
28 | 1999
29 | 0
30 |
31 |
32 | 假如我有仙女棒
33 | http://skin.client.xunlei.com/7.9/20140110150117_%E5%81%87%E5%A6%82%E6%88%91%E6%9C%89%E4%BB%99%E5%A5%B3%E6%A3%92.thunderskin
34 | x_52cf9aec1b775st.jpg
35 | 1096
36 | 0
37 |
38 |
39 | 马卡龙·蓝
40 | http://skin.client.xunlei.com/7.9/20140311105658_马卡龙·蓝.thunderskin
41 | x_531e7b86e1d1alu.jpg
42 | 1684
43 | 0
44 |
45 |
46 | 散落的心
47 | http://skin.client.xunlei.com/7.9/20140303140929_散落的心.thunderskin
48 | x_53141caad2d43er.jpg
49 | 1847
50 | 0
51 |
52 |
53 | M4突击步枪
54 | http://skin.client.xunlei.com/7.9/20140303190730_M4突击步枪9.thunderskin
55 | x_531462944a166cy.jpg
56 | 1987
57 | 0
58 |
59 |
60 | 田园风光
61 | http://skin.client.xunlei.com/7.9/20140225183451_田园风光9.thunderskin
62 | x_530c71e84d543lw.jpg
63 | 1655
64 | 0
65 |
66 |
67 | Jeep牧马人极地版
68 | http://skin.client.xunlei.com/7.9/20140218144021_Jeep牧马人极地版.thunderskin
69 | x_53030062861e8js.jpg
70 | 1652
71 | 0
72 |
73 |
74 | 开心疗法
75 | http://skin.client.xunlei.com/7.9/20140218160140_%E5%BC%80%E5%BF%83%E7%96%97%E6%B3%959.thunderskin
76 | x_530313818db07jx.jpg
77 | 1207
78 | 0
79 |
80 |
81 | 通往月亮之国
82 | http://skin.client.xunlei.com/7.9/20140217164736_%E9%80%9A%E5%BE%80%E6%9C%88%E4%BA%AE%E4%B9%8B%E5%9B%BD9.thunderskin
83 | x_5301ccb88ae11gd.jpg
84 | 1800
85 | 0
86 |
87 |
88 | 捕梦网
89 | http://skin.client.xunlei.com/7.9/20140121141531_捕梦网.thunderskin
90 | x_52de10998af63wc.jpg
91 | 1845
92 | 0
93 |
94 |
95 | 那些复古潮
96 | http://skin.client.xunlei.com/7.9/20140120173520_%E9%82%A3%E4%BA%9B%E5%A4%8D%E5%8F%A4%E6%BD%AE9.thunderskin
97 | x_52dcee88306bbet.jpg
98 | 1269
99 | 0
100 |
101 |
102 | 祝你开心
103 | http://skin.client.xunlei.com/7.9/20140117144933_%E7%A5%9D%E4%BD%A0%E5%BC%80%E5%BF%839.thunderskin
104 | x_52d8d28f4d063lj.jpg
105 | 1373
106 | 0
107 |
108 |
109 | 福特野马
110 | http://skin.client.xunlei.com/7.9/20140115112424_福特野马.thunderskin
111 | x_52d5ff7692acfmq.jpg
112 | 1874
113 | 0
114 |
115 |
116 | 甜甜彩虹糖
117 | http://skin.client.xunlei.com/7.9/20131021150214_甜甜彩虹糖.thunderskin
118 | x_5264d1862a0bbrg.jpg
119 | 1687
120 | 0
121 |
122 |
123 | 惟有蝶儿赏花来
124 | http://skin.client.xunlei.com/7.9/20131015152250_惟有蝶儿赏花来.thunderskin
125 | x_525ced6a553delf.jpg
126 | 1875
127 | 0
128 |
129 |
130 | 路过青春
131 | http://skin.client.xunlei.com/7.9/20131010153127_路过青春.thunderskin
132 | x_525657e687e61nm.jpg
133 | 1875
134 | 0
135 |
136 |
137 | 宾利欧陆GT
138 | http://skin.client.xunlei.com/7.9/20130929182911_%E5%AE%BE%E5%88%A9%E6%AC%A7%E9%99%869.thunderskin
139 | x_5248017ecebbfhq.jpg
140 | 1623
141 | 0
142 |
143 |
144 | 爱猫的女孩
145 | http://skin.client.xunlei.com/7.9/20131021170620_%E7%88%B1%E7%8C%AB%E7%9A%84%E5%A5%B3%E5%AD%A9.thunderskin
146 | x_5264f032e4108km.jpg
147 | 1340
148 | 0
149 |
150 |
151 | 玛莎拉蒂
152 | http://skin.client.xunlei.com/7.9/20130929142750_玛莎拉蒂.thunderskin
153 | x_5247c8757d648dj.jpg
154 | 1987
155 | 0
156 |
157 |
158 | 夜·视角
159 | http://skin.client.xunlei.com/7.9/20130927180557_夜·视角.thunderskin
160 | x_52455894450a4de.jpg
161 | 1874
162 | 0
163 |
164 |
165 | 战神GTR
166 | http://skin.client.xunlei.com/7.9/20130926145219_战神GTR.thunderskin
167 | x_5243d9bcac9cfsq.jpg
168 | 1987
169 | 0
170 |
171 |
172 | 甜甜向上
173 | http://skin.client.xunlei.com/7.9/20130924151037_甜甜向上.thunderskin
174 | x_52428855aff04yx.jpg
175 | 1924
176 | 0
177 |
178 |
179 | 蒙奇奇
180 | http://skin.client.xunlei.com/7.9/20131016141830_蒙奇奇.thunderskin
181 | x_525e2fc392c82xg.jpg
182 | 1966
183 | 0
184 |
185 |
186 | 彩蝶逐兰
187 | http://skin.client.xunlei.com/7.9/20130923151343_彩蝶逐兰.thunderskin
188 | x_523fea46c71c5zf.jpg
189 | 1899
190 | 0
191 |
192 |
193 | 五彩波斯菊
194 | http://skin.client.xunlei.com/7.9/20130918141209_五彩波斯菊.thunderskin
195 | x_523944529c07cvs.jpg
196 | 1787
197 | 0
198 |
199 |
200 | 书与玫瑰
201 | http://skin.client.xunlei.com/7.9/20130917173623_%E4%B9%A6%E4%B8%8E%E7%8E%AB%E7%91%B0.thunderskin
202 | x_523822d18c40fnv.jpg
203 | 1654
204 | 0
205 |
206 |
207 | 凯迪拉克
208 | http://skin.client.xunlei.com/7.9/20131012113619_凯迪拉克.thunderskin
209 | x_5258c3c244d4eat.jpg
210 | 1879
211 | 0
212 |
213 |
214 | 诱惑味蕾
215 | http://skin.client.xunlei.com/7.9/20131009152709_诱惑味蕾.thunderskin
216 | x_5255055d93117ey.jpg
217 | 1987
218 | 0
219 |
220 |
221 | 国风悠悠
222 | http://skin.client.xunlei.com/7.9/20130904161809_%E5%9B%BD%E9%A3%8E%E6%82%A0%E6%82%A0.thunderskin
223 | x_5226ecd6f186dlw.jpg
224 | 1675
225 | 0
226 |
227 |
228 | 星星的梦想
229 | http://skin.client.xunlei.com/7.9/20130905112827_星星的梦想.thunderskin
230 | x_5226de4315d2cia.jpg
231 | 1698
232 | 0
233 |
234 |
235 | 被遗忘的时光
236 | http://skin.client.xunlei.com/7.9/20130902161127_%E8%A1%8C%E8%B5%B0%E7%9A%84%E6%97%B6%E5%85%89.thunderskin
237 | x_5224484309dealn.jpg
238 | 1632
239 | 0
240 |
241 |
242 | 浓情奶茶
243 | http://skin.client.xunlei.com/7.9/20130822151800_浓情奶茶.thunderskin
244 | x_5215bb4a87411sh.jpg
245 | 1874
246 | 0
247 |
248 |
249 | 彩屋成排
250 | http://skin.client.xunlei.com/7.9/20131119151142_彩屋成排.thunderskin
251 | x_528b2c1c39c32zi.jpg
252 | 1874
253 | 0
254 |
255 |
256 |
--------------------------------------------------------------------------------
/XunLei/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/XunLei/bg.jpg
--------------------------------------------------------------------------------
/XunLei/local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/XunLei/local.png
--------------------------------------------------------------------------------
/XunLei/xl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/XunLei/xl.png
--------------------------------------------------------------------------------
/ZB2129102102910290.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/ZB2129102102910290.png
--------------------------------------------------------------------------------
/ddui/DDAbstractView.qml:
--------------------------------------------------------------------------------
1 | /*
2 | This is a base root qml view and all requset can trans to C++
3 | like Qt all signls and slot can be followed by this childrens
4 | */
5 | import QtQuick 2.1
6 |
7 | Item {
8 | visible: true
9 | width: 816
10 | height: 600
11 | property double bgMarign: 8
12 | //you can emit this signal to c++
13 | signal signalQmlOptions(variant msg,string type);
14 |
15 | //max and normal window states
16 | function transToQml(showMax){
17 | if(showMax){
18 | bgMarign = 0;
19 | }else{
20 | bgMarign = 8;
21 | }
22 | }
23 | MouseArea{
24 | id:ma
25 | anchors.fill: parent
26 | acceptedButtons: Qt.LeftButton
27 | property int ix:0
28 | property int iy:0
29 | onPressed:{
30 | ma.ix = mouseX;
31 | ma.iy = mouseY;
32 | }
33 | onPositionChanged: {
34 | var dyx = mouseX - ma.ix;
35 | var dyy = mouseY - ma.iy;
36 | var arryTmp = [dyx,dyy];
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/ddui/DDBottomBar.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 |
3 | Rectangle {
4 | id:btmRect
5 | width: 100
6 | height: 30
7 | color: "#009EDB"
8 | property string btmVersion: "主程序版本: V1.0.123"
9 | property string btmConn: "已连接到多多指教服务器"
10 | Text {
11 | id: versionTxt
12 | width: btmRect.width/2-4
13 | height: btmRect.height
14 | anchors.left: parent.left
15 | anchors.leftMargin: 4
16 | text: btmVersion
17 | horizontalAlignment: Text.AlignLeft
18 | verticalAlignment: Text.AlignVCenter
19 | color: "white"
20 | font.pixelSize: 12
21 | renderType: Text.NativeRendering
22 | }
23 | Text {
24 | id: connctTxt
25 | anchors.left: versionTxt.right
26 | width: btmRect.width/2-4
27 | height: btmRect.height
28 | text: btmConn
29 | horizontalAlignment: Text.AlignRight
30 | verticalAlignment: Text.AlignVCenter
31 | color: "white"
32 | font.pixelSize: 12
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ddui/DDCloseButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 |
3 | Rectangle{
4 | id:closeBtn
5 | width: 27
6 | height: 22
7 | property bool hasMouse: false
8 | property string statusN: ""
9 | property string imgUrl: "qrc:/images/close"+statusN+".png"
10 | color:hasMouse?"#D44027": "transparent"
11 | signal signalCloseApp();
12 | MouseArea{
13 | id:ma
14 | anchors.fill: closeBtn
15 | hoverEnabled: true
16 | onClicked: {
17 | statusN = "_pressed";
18 | signalCloseApp();
19 | }
20 | onEntered: {
21 | statusN = "_hover"
22 | closeBtn.hasMouse = true;
23 | }
24 | onExited: {
25 | statusN = "";
26 | closeBtn.hasMouse = false;
27 | }
28 | }
29 | Image {
30 | id: btntext
31 | anchors.fill: parent
32 | source: imgUrl
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ddui/DDHomeButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.2
4 |
5 | Rectangle {
6 | id:btnRect
7 | width: 100
8 | height: 100
9 | color: "transparent"
10 | property url btnUrl: "http://www.easyicon.net/download/png/1194626/72/"
11 | property string btnTxt: "Home"
12 | property bool systemBtn: false
13 | signal signalBtnClicked(string btn);
14 | MouseArea{
15 | id:ma
16 | anchors.fill: btnRect
17 | hoverEnabled: true
18 | onClicked: {
19 | signalBtnClicked(btnTxt);
20 | }
21 | onEntered: {
22 | icon.opacity=0.8;
23 | btnRect.color="#00CBEF"
24 | btnRect.border.width= !systemBtn?1:0
25 | btnRect.radius = !systemBtn?3:0;
26 | btnRect.border.color="#009AD3";
27 | }
28 | onExited: {
29 | icon.opacity=1.0
30 | btnRect.radius = 0;
31 | btnRect.color="transparent"
32 | btnRect.border.width=0
33 | btnRect.border.color="transparent";
34 | }
35 | }
36 | Image {
37 | id: icon
38 | width: !systemBtn?btnRect.width*0.72:parent.width
39 | height: width
40 | anchors.horizontalCenter: parent.horizontalCenter
41 | source: btnUrl
42 | }
43 | Text {
44 | id: btntext
45 | anchors.horizontalCenter: parent.horizontalCenter
46 | width: !systemBtn?btnRect.width*0.72:0
47 | anchors.bottom: parent.bottom
48 | text: btnTxt
49 | height: !systemBtn?btnRect.width*0.28:0
50 | visible: !systemBtn
51 | horizontalAlignment: Text.AlignHCenter
52 | verticalAlignment: Text.AlignVCenter
53 | color: "white"
54 | font.pixelSize: 14
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/ddui/DDMidView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.1
4 | import QtQuick.Layouts 1.1
5 | import "../Driver/" as DriverPage
6 |
7 | Item{
8 | SplitView {
9 | anchors.fill: parent
10 | orientation: Qt.Horizontal
11 | Rectangle {
12 | id: centerItem
13 | Layout.minimumWidth: 560
14 | Layout.fillWidth: true
15 | color: "#F7FEFF"
16 | DriverPage.DDTabView {
17 | id: midPage
18 | // source: "images/mid.jpg"
19 | anchors.fill: parent
20 | }
21 | }
22 | Rectangle {
23 | width: 250
24 | Layout.minimumWidth: 250
25 | Layout.maximumWidth: 250
26 | color: "#E3F7FF"
27 | Image {
28 | id: name2
29 | source: "qrc:/images/right.jpg"
30 | anchors.fill: parent
31 | }
32 | }
33 | }
34 | function changePage(id){
35 | midPage.currentIndex = id;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/ddui/DDSplitView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.1
4 | import QtQuick.Layouts 1.1
5 |
6 | SplitView {
7 | anchors.fill: parent
8 | orientation: Qt.Vertical
9 | DDTopBar {
10 | width: parent.width
11 | Layout.maximumHeight: 100
12 | Layout.minimumHeight: 100
13 | color: "#01B6E1"
14 | onSignalTopBtnClicked: {
15 | //跳转到midview
16 | centerItem.changePage(btn)
17 | }
18 | }
19 | DDMidView {
20 | id: centerItem
21 | Layout.minimumHeight: 100
22 | Layout.fillHeight: true
23 | }
24 | DDBottomBar {
25 | Layout.maximumHeight: 30
26 | Layout.minimumHeight: 30
27 | height: 30
28 | width: parent.width
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/ddui/DDTopBar.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.2
4 |
5 | Rectangle {
6 | width: 72
7 | height: 72
8 | signal signalTopBtnClicked(var btn);
9 | Row{
10 | anchors.fill: parent
11 | DDHomeButton{
12 | id:homeBtn
13 | height: parent.height
14 | onSignalBtnClicked: {
15 | signalTopBtnClicked(0)
16 | }
17 | }
18 | DDHomeButton{
19 | id:homeBtn2
20 | height: parent.height
21 | btnUrl: "http://download.easyicon.net/png/1194547/72/"
22 | btnTxt: "有赞商城"
23 | onSignalBtnClicked: {
24 | signalTopBtnClicked(1)
25 | }
26 | }
27 | DDHomeButton{
28 | id:homeBtn3
29 | height: parent.height
30 | btnUrl: "http://download.easyicon.net/png/1194540/72/"
31 | btnTxt: "迅雷7"
32 | onSignalBtnClicked: {
33 | signalTopBtnClicked(2)
34 | }
35 | }
36 | DDHomeButton{
37 | id:homeBtn4
38 | height: parent.height
39 | btnUrl: "http://download.easyicon.net/png/1194545/72/"
40 | btnTxt: "360安全卫士"
41 | onSignalBtnClicked: {
42 | signalTopBtnClicked(3)
43 | }
44 | }
45 | DDHomeButton{
46 | id:homeBtn5
47 | height: parent.height
48 | btnUrl: "http://download.easyicon.net/png/1194543/72/"
49 | btnTxt: "QQ"
50 | onSignalBtnClicked: {
51 | signalTopBtnClicked(4)
52 | }
53 | }
54 | DDHomeButton{
55 | id:homeBtn6
56 | height: parent.height
57 | btnUrl: "http://download.easyicon.net/png/1194534/72/"
58 | btnTxt: "多多指教"
59 | onSignalBtnClicked: {
60 | signalTopBtnClicked(5)
61 | }
62 | }
63 | DDHomeButton{
64 | id:homeBtn7
65 | height: parent.height
66 | btnUrl: "http://download.easyicon.net/png/42882/72/"
67 | btnTxt: "数字雨"
68 | onSignalBtnClicked: {
69 | signalTopBtnClicked(6)
70 | }
71 | }
72 | DDHomeButton{
73 | id:homeBtn8
74 | height: parent.height
75 | btnUrl: "http://download.easyicon.net/png/1150085/72/"
76 | btnTxt: "诗词歌赋"
77 | onSignalBtnClicked: {
78 | signalTopBtnClicked(7)
79 | }
80 | }
81 | }
82 | DDCloseButton{
83 | id:close
84 | width: 27
85 | height: 22
86 | anchors.top: parent.top
87 | // anchors.margins: 1
88 | anchors.right: parent.right
89 | onSignalCloseApp: {
90 | signalQmlOptions("system","close");
91 | }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/ddui/DDuiShadowBg.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtGraphicalEffects 1.0
3 |
4 | Rectangle {
5 | //最底层透明图层
6 | width: 480;
7 | height: 680;
8 | color: "transparent"
9 | property double bgmarigns: 8.0
10 | property int listViewActive: 0
11 | Item {
12 | //主体窗口
13 | id: container;
14 | anchors.centerIn: parent;
15 | width: parent.width;
16 | height: parent.height;
17 | Rectangle {
18 | id: mainRect
19 | width: container.width-(2*rectShadow.radius);
20 | height: container.height - (2*rectShadow.radius);
21 | anchors.centerIn: parent;
22 | //以下省略
23 | }
24 | }
25 | DropShadow {//绘制阴影
26 | id: rectShadow;
27 | anchors.fill: source
28 | cached: true;
29 | horizontalOffset: 0;
30 | verticalOffset: 3;
31 | radius: bgmarigns;
32 | samples: 16;
33 | color: "#80000000";
34 | smooth: true;
35 | source: container;
36 | }
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/ddui/ddframeless_helper.h:
--------------------------------------------------------------------------------
1 | /*********************************************************************************
2 | *Copyright(C),2014-2019,www.heilqt.com
3 | *FileName(文件名): frameless_helper
4 | *Author (作者): TobyYi(tanboy@heilqt.com)
5 | *Version (版本): 1.0.0
6 | *CreateDate(创建日期): 2017-05-18
7 | *FinishDate(完成日期): 2017-05-18
8 | *Description(描述):
9 | 1.用于主要说明此程序文件完成的主要功能
10 | 2.与其他模块或函数的接口、输出值、取值范围、含义及参数间的控制、顺序、独立及依赖关系
11 |
12 | *Others(其他内容说明):参考相关博客文章
13 | others
14 | *Function List(函数列表):
15 | 1.主要函数列表,每条记录应包含函数名及功能简要说明
16 |
17 | 2.
18 | *History(历史修订记录):
19 | 1.Date: 修改日期
20 | Author:修改者
21 | Modification:修改内容简介
22 |
23 | 2.
24 |
25 | **********************************************************************************/
26 |
27 | #ifndef FRAMELESS_HELPER_H
28 | #define FRAMELESS_HELPER_H
29 |
30 | #include
31 | #include
32 |
33 | class QWidget;
34 | class DDFramelessHelperPrivate;
35 |
36 | class DDFramelessHelper : public QObject
37 | {
38 | Q_OBJECT
39 |
40 | public:
41 | DDFramelessHelper(QObject *parent = 0);
42 | ~DDFramelessHelper();
43 | void activateOn(QWidget *topLevelWidget);
44 | void activateOnQmlWidget(QWindow *topLevelWidget);
45 |
46 | void removeFrom(QWidget *topLevelWidget);
47 | void removeQmlWidgetFrom(QWindow *topLevelWidget);
48 |
49 |
50 | void setWidgetMovable(bool movable);
51 | void setWidgetResizable(bool resizable);
52 | void setRubberBandOnMove(bool movable);
53 | void setRubberBandOnResize(bool resizable);
54 | void setBorderWidth(uint width);
55 | void setTitleHeight(uint height);
56 | bool widgetResizable();
57 | bool widgetMovable();
58 | bool rubberBandOnMove();
59 | bool rubberBandOnResisze();
60 | uint borderWidth();
61 | uint titleHeight();
62 |
63 | protected:
64 | virtual bool eventFilter(QObject *obj, QEvent *event);
65 |
66 | private:
67 | DDFramelessHelperPrivate *d;
68 | };
69 |
70 | #endif //FRAMELESS_HELPER_H
71 |
--------------------------------------------------------------------------------
/ddui/ddnewquickwindow.cpp:
--------------------------------------------------------------------------------
1 | #include "ddnewquickwindow.h"
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | DDNewQuickWindow::DDNewQuickWindow(QQuickView *parent) : QQuickView(parent)
8 | {
9 | setFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
10 | setColor(Qt::transparent);
11 | setResizeMode(QQuickView::SizeRootObjectToView);
12 | setMinimumWidth(816);
13 | mHelper = new DDFramelessHelper(this);
14 | mHelper->activateOnQmlWidget(this);
15 | mHelper->setTitleHeight(100);
16 | }
17 | ///
18 | /// \brief YbQuickView::showTrayIcon
19 | /// 显示系统托盘 可扩展
20 | ///
21 | void DDNewQuickWindow::showTrayIcon(){
22 | QObject *root = 0;
23 | if (rootObject() != NULL)
24 | {
25 | root = rootObject();
26 | QAction *minimizeAction = new QAction(QObject::tr("Mi&nimize"), this);
27 | root->connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
28 | QAction *maximizeAction = new QAction(QObject::tr("Ma&ximize"), this);
29 | root->connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
30 | QAction *restoreAction = new QAction(QObject::tr("&Restore"), this);
31 | root->connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
32 | QAction *quitAction = new QAction(QObject::tr("&Quit"), this);
33 | root->connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
34 |
35 | QMenu *trayIconMenu = new QMenu();
36 | trayIconMenu->addAction(minimizeAction);
37 | trayIconMenu->addAction(maximizeAction);
38 | trayIconMenu->addAction(restoreAction);
39 | trayIconMenu->addSeparator();
40 | trayIconMenu->addAction(quitAction);
41 |
42 | QSystemTrayIcon *trayIcon = new QSystemTrayIcon(this);
43 | trayIcon->setContextMenu(trayIconMenu);
44 | trayIcon->setIcon(QIcon(":/360logo.ico"));
45 | trayIcon->show();
46 | }
47 |
48 | }
49 | ///
50 | /// \brief DDNewQuickWindow::setSourceAndRegsiterObj
51 | /// \param url
52 | /// \param regsiter
53 | /// 加载主qml界面
54 | /// 并且注册C++对象到qml,方便与qml进行交互
55 | ///
56 | void DDNewQuickWindow::setSourceAndRegsiterObj(const QUrl &url, bool regsiter)
57 | {
58 | #ifndef USE_YOUZAN
59 | this->rootContext()->setContextProperty("yzObj", &yZObj);
60 | #endif
61 | if(regsiter){
62 | //model需要在setsource之前设置
63 | mTableModel.initData(14);
64 | mMyModel.initData(5);
65 | this->rootContext()->setContextProperty("mTableModel", &mTableModel);
66 | this->rootContext()->setContextProperty("mMyModel", &mMyModel);
67 | setSource(url);
68 | //setSource后才能得到obj对象
69 | m_Obj = this->rootObject();
70 | connect(m_Obj,SIGNAL(signalQmlOptions(QVariant,QString)),this,SLOT(slotRecevQmlReq(QVariant,QString)));
71 | }
72 | }
73 | ///
74 | /// \brief YbQuickView::slotRecevQmlReq
75 | /// \param var
76 | /// \param cmd
77 | /// 接受来自QML的请求
78 | ///
79 | void DDNewQuickWindow::slotRecevQmlReq(QVariant var, QString cmd)
80 | {
81 | if(var.toString()=="system"){
82 | if(cmd == "close"){
83 | this->close();
84 | qApp->quit();
85 | }else if(cmd == "min"){
86 | this->showMinimized();
87 | }
88 | }
89 |
90 | }
91 | ///
92 | /// \brief DDNewQuickWindow::mouseDoubleClickEvent
93 | /// \param event
94 | /// 双击可最大化窗口和还原窗口大小
95 | ///
96 | void DDNewQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)
97 | {
98 | QRect rect(10,2,this->width()-70,mHelper->titleHeight());
99 |
100 | if(event->button() == Qt::LeftButton && rect.contains(event->pos())) {
101 | if(!isMax){
102 | isMax = !isMax;
103 | slotShowMaxAndNormal(true);
104 | showMaximized();
105 | update();
106 | }else{
107 | isMax = !isMax;
108 | slotShowMaxAndNormal(false);
109 | showNormal();
110 | update();
111 | }
112 | }
113 | QQuickView::mouseDoubleClickEvent(event);
114 | }
115 | ///
116 | /// \brief YbQuickView::slotShowMaxAndNormal
117 | /// \param showMax
118 | /// 你可以注册该方法到QML当中
119 | void DDNewQuickWindow::slotShowMaxAndNormal(bool showMax)
120 | {
121 | if(m_Obj){
122 | QVariant returnVal;
123 | QMetaObject::invokeMethod(m_Obj,"transToQml",Q_RETURN_ARG(QVariant,returnVal),
124 | Q_ARG(QVariant,showMax));
125 | }
126 | }
127 |
--------------------------------------------------------------------------------
/ddui/ddnewquickwindow.h:
--------------------------------------------------------------------------------
1 | #ifndef DDNEWQUICKWINDOW_H
2 | #define DDNEWQUICKWINDOW_H
3 |
4 | #include
5 | #include
6 | #include
7 |
8 | #include
9 | #include "youzan/youzanobject.h"
10 | #include "model/bdtablemodel.h"
11 |
12 | #include "ddframeless_helper.h"
13 |
14 | class DDNewQuickWindow : public QQuickView
15 | {
16 | Q_OBJECT
17 | public:
18 | explicit DDNewQuickWindow(QQuickView *parent = nullptr);
19 |
20 | signals:
21 |
22 | public slots:
23 | void setSourceAndRegsiterObj(const QUrl &url, bool regsiter=true);
24 | void showTrayIcon();
25 | protected:
26 | void mouseDoubleClickEvent(QMouseEvent *event);
27 | private slots:
28 | void slotRecevQmlReq(QVariant var, QString cmd);
29 | private:
30 | QObject *m_Obj{nullptr};
31 | YouZanObject yZObj;
32 | BDTableModel mTableModel;
33 | BDTableModel mMyModel;
34 | bool isMax{false};
35 | DDFramelessHelper *mHelper{nullptr};
36 | private:
37 | void slotShowMaxAndNormal(bool showMax);
38 | };
39 |
40 | #endif // DDNEWQUICKWINDOW_H
41 |
--------------------------------------------------------------------------------
/ddui/ddquickview.cpp:
--------------------------------------------------------------------------------
1 | #include "ddquickview.h"
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | YbQuickView::YbQuickView(QQuickView *parent) :
8 | QQuickView(parent),
9 | finishedhideAni(true),
10 | finishedshowAni(true),
11 | isMax(false),
12 | m_Obj(NULL)
13 | {
14 | isLeftPressDown = false;
15 | moveRangePostion = QPoint(this->width(),50);
16 | this->dir = NONE;
17 | isZhiding = true;
18 | isHide = false;
19 | isHasMouseEvent = true;
20 | iHeight = 600;
21 |
22 | setFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
23 | setColor(Qt::transparent);
24 | setResizeMode(QQuickView::SizeRootObjectToView);
25 | setMinimumWidth(816);
26 | }
27 |
28 | YbQuickView::~YbQuickView()
29 | {
30 | }
31 | ///
32 | /// \brief YbQuickView::showTrayIcon
33 | /// 显示系统托盘 可扩展
34 | ///
35 | void YbQuickView::showTrayIcon(){
36 | QObject *root = 0;
37 | if (rootObject() != NULL)
38 | {
39 | root = rootObject();
40 | QAction *minimizeAction = new QAction(QObject::tr("Mi&nimize"), this);
41 | root->connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
42 | QAction *maximizeAction = new QAction(QObject::tr("Ma&ximize"), this);
43 | root->connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
44 | QAction *restoreAction = new QAction(QObject::tr("&Restore"), this);
45 | root->connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
46 | QAction *quitAction = new QAction(QObject::tr("&Quit"), this);
47 | root->connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
48 |
49 | QMenu *trayIconMenu = new QMenu();
50 | trayIconMenu->addAction(minimizeAction);
51 | trayIconMenu->addAction(maximizeAction);
52 | trayIconMenu->addAction(restoreAction);
53 | trayIconMenu->addSeparator();
54 | trayIconMenu->addAction(quitAction);
55 |
56 | QSystemTrayIcon *trayIcon = new QSystemTrayIcon(this);
57 | trayIcon->setContextMenu(trayIconMenu);
58 | trayIcon->setIcon(QIcon(":/360logo.ico"));
59 | trayIcon->show();
60 | }
61 |
62 | }
63 | void YbQuickView::setMaxYbView(QSize size)
64 | {
65 | this->setMaximumSize(size);
66 | }
67 |
68 | void YbQuickView::setHasMouse(bool isHasMouse)
69 | {
70 | isZhiding = isHasMouse;
71 | }
72 |
73 | void YbQuickView::setSourceAndRegsiterObj(const QUrl &url, bool regsiter)
74 | {
75 | #ifndef USE_YOUZAN
76 | this->rootContext()->setContextProperty("yzObj", &yZObj);
77 | #endif
78 | if(regsiter){
79 | //model需要在setsource之前设置
80 | mTableModel.initData(14);
81 | mMyModel.initData(5);
82 | this->rootContext()->setContextProperty("mTableModel", &mTableModel);
83 | this->rootContext()->setContextProperty("mMyModel", &mMyModel);
84 | setSource(url);
85 | //setSource后才能得到obj对象
86 | m_Obj = this->rootObject();
87 | connect(m_Obj,SIGNAL(signalQmlOptions(QVariant,QString)),this,SLOT(slotRecevQmlReq(QVariant,QString)));
88 | }
89 | }
90 |
91 | void YbQuickView::setCanMoveRange(const QPoint &point)
92 | {
93 | moveRangePostion = point;
94 | }
95 | void YbQuickView::mouseReleaseEvent(QMouseEvent *event)
96 | {
97 | if(event->button() == Qt::LeftButton) {
98 | isLeftPressDown = false;
99 | if(dir != NONE) {
100 | this->setCursor(QCursor(Qt::ArrowCursor));
101 | }
102 | }
103 | QQuickView::mouseReleaseEvent(event);
104 | }
105 |
106 | void YbQuickView::mousePressEvent(QMouseEvent *event)
107 | {
108 | switch(event->button()) {
109 | case Qt::LeftButton:
110 | isLeftPressDown = true;
111 | if(dir != NONE) {
112 | } else {
113 | if( (event->pos().y()<=moveRangePostion.y()) && (event->pos().x() globalPos() - this->frameGeometry().topLeft();
116 | canMove = true;
117 | }else{
118 | event->accept();
119 | canMove = false;
120 | QQuickView::mousePressEvent(event);
121 | return;
122 | }
123 | }
124 | break;
125 | default:
126 | QQuickView::mousePressEvent(event);
127 | }
128 | QQuickView::mousePressEvent(event);
129 | }
130 |
131 | void YbQuickView::mouseDoubleClickEvent(QMouseEvent *event)
132 | {
133 | QRect rect(10,2,this->width()-70,100);
134 | if(isZhiding)
135 | {
136 | QQuickView::mouseDoubleClickEvent(event);
137 | return;
138 | }
139 | if(event->button() == Qt::LeftButton && rect.contains(event->pos())) {
140 | if(!isMax){
141 | isMax = !isMax;
142 | slotShowMaxAndNormal(true);
143 | this->showMaximized();
144 | this->update();
145 | }else{
146 | isMax = !isMax;
147 | slotShowMaxAndNormal(false);
148 | this->showNormal();
149 | update();
150 | }
151 | }
152 | QQuickView::mouseDoubleClickEvent(event);
153 | }
154 | bool YbQuickView::event(QEvent *e)
155 | {
156 | switch (e->type()) {
157 | case QEvent::Enter:
158 | {
159 | //qDebug()<<"Enter "<ignore();
165 | return false;
166 | };
167 | if(isHide && finishedshowAni)
168 | {
169 | finishedshowAni = false;
170 | //qDebug()<<"QEvent::Enter in it "<width()<<"\n"<setDuration(200);
175 | animation->setStartValue((24));
176 | animation->setEndValue(iHeight);
177 |
178 | QPropertyAnimation *animation3 = new QPropertyAnimation(this, "opacity");
179 | animation3->setDuration(500);
180 | animation3->setStartValue(0.8);
181 | animation3->setEndValue(1.0);
182 |
183 | group2->addAnimation(animation);
184 | group2->addAnimation(animation3);
185 | animation->setEasingCurve(QEasingCurve::InOutQuad);
186 | group2->start();
187 | }
188 |
189 | }break;
190 | case QEvent::Leave:
191 | {
192 | //qDebug()<<"Leave "<ignore();return true;}
197 | if(this->position().y() <=0 && !isHide &&finishedhideAni)
198 | {
199 | finishedhideAni = false;
200 | group3 = new QParallelAnimationGroup;
201 | connect(group3,SIGNAL(finished()),this,SLOT(slotFinishedAnimation2()));
202 | QPropertyAnimation *animation = new QPropertyAnimation(this, "height");
203 | animation->setDuration(500);
204 | animation->setStartValue(iHeight);
205 | animation->setEndValue((21));
206 |
207 | QPropertyAnimation *animation3 = new QPropertyAnimation(this, "opacity");
208 | animation3->setDuration(500);
209 | animation3->setStartValue(1.0);
210 | animation3->setEndValue(0.8);
211 |
212 | group3->addAnimation(animation);
213 | group3->addAnimation(animation3);
214 | animation->setEasingCurve(QEasingCurve::InOutQuart);
215 | group3->start();
216 | }
217 |
218 | }break;
219 | default:
220 | break;
221 | }
222 | return QQuickView::event(e);
223 | }
224 | void YbQuickView::mouseMoveEvent(QMouseEvent *event)
225 | {
226 | QPoint gloPoint = event->globalPos();
227 | QRect rect(0,0,width(),height());
228 | QPoint tl = mapToGlobal(rect.topLeft());
229 | QPoint rb = mapToGlobal(rect.bottomRight());
230 |
231 | if(!isLeftPressDown) {
232 | this->region(gloPoint);
233 | } else {
234 | if(dir != NONE) {
235 | QRect rMove(tl, rb);
236 | switch(dir) {
237 | case LEFT:
238 | if(rb.x() - gloPoint.x() <= this->minimumWidth())
239 | {
240 | rMove.setX(tl.x());
241 | }
242 | else{
243 | rMove.setX(gloPoint.x());
244 | }
245 | break;
246 | case RIGHT:
247 | if(gloPoint.x()- tl.x() <=this->minimumWidth()){
248 | if(rb.x() - tl.x() <= this->minimumWidth())
249 | {
250 | rMove.setWidth(this->minimumWidth());
251 | }else{
252 | rMove.setWidth(gloPoint.x() - tl.x());
253 | }
254 | }else{
255 | rMove.setWidth(gloPoint.x() - tl.x());
256 | }
257 | break;
258 | case UP:
259 | if(rb.y() - gloPoint.y() <= this->minimumHeight())
260 | rMove.setY(tl.y());
261 | else
262 | rMove.setY(gloPoint.y());
263 | break;
264 | case DOWN:
265 | if(gloPoint.y()- tl.y() <=this->minimumHeight())
266 | {
267 | rMove.setHeight(this->minimumHeight());
268 | }else{
269 | rMove.setHeight(gloPoint.y() - tl.y());
270 | }
271 | break;
272 | case LEFTTOP:
273 | if(rb.x() - gloPoint.x() <= this->minimumWidth())
274 | rMove.setX(tl.x());
275 | else
276 | rMove.setX(gloPoint.x());
277 | if(rb.y() - gloPoint.y() <= this->minimumHeight())
278 | rMove.setY(tl.y());
279 | else
280 | rMove.setY(gloPoint.y());
281 | break;
282 | case RIGHTTOP:
283 | if(rb.x() - gloPoint.x() <= this->minimumWidth())
284 | rMove.setX(tl.x());
285 | else
286 | rMove.setX(gloPoint.x());
287 | if(rb.y() - gloPoint.y() <= this->minimumHeight())
288 | rMove.setY(tl.y());
289 | else
290 | rMove.setY(gloPoint.y());
291 | break;
292 | case LEFTBOTTOM:
293 | if(rb.x() - gloPoint.x() <= this->minimumWidth())
294 | rMove.setX(tl.x());
295 | else
296 | rMove.setX(gloPoint.x());
297 | if(rb.y() - gloPoint.y() <= this->minimumHeight())
298 | rMove.setY(tl.y());
299 | else
300 | rMove.setY(gloPoint.y());
301 | break;
302 | case RIGHTBOTTOM:
303 | if(rb.x() - gloPoint.x() <= this->minimumWidth())
304 | rMove.setX(tl.x());
305 | else
306 | rMove.setX(gloPoint.x());
307 | if(rb.y() - gloPoint.y() <= this->minimumHeight())
308 | rMove.setY(tl.y());
309 | else
310 | rMove.setY(gloPoint.y());
311 | break;
312 | default:
313 |
314 | break;
315 | }
316 | if(rMove.width() <= this->maximumWidth() && rMove.height() <= this->maximumHeight())
317 | {
318 | this->setGeometry(rMove);
319 | iHeight = this->height();
320 | }
321 | } else {
322 | if(canMove){
323 | setPosition(event->globalPos() - dragPosition);
324 | }
325 | event->accept();
326 | }
327 | }
328 | QQuickView::mouseMoveEvent(event);
329 | }
330 |
331 | void YbQuickView::region(const QPoint &cursorGlobalPoint)
332 | {
333 | QRect rect(0,0,width(),height());;
334 | QPoint tl = mapToGlobal(rect.topLeft());
335 | QPoint rb = mapToGlobal(rect.bottomRight());
336 | int x = cursorGlobalPoint.x();
337 | int y = cursorGlobalPoint.y();
338 | if(tl.x() + PADDING >= x && tl.x() <= x && tl.y() + PADDING >= y && tl.y() <= y) {
339 | // 左上角
340 | dir = LEFTTOP;
341 | this->setCursor(QCursor(Qt::SizeFDiagCursor));
342 | } else if(x >= rb.x() - PADDING && x <= rb.x() && y >= rb.y() - PADDING && y <= rb.y()) {
343 | // 右下角
344 | dir = RIGHTBOTTOM;
345 | this->setCursor(QCursor(Qt::SizeFDiagCursor));
346 | } else if(x <= tl.x() + PADDING && x >= tl.x() && y >= rb.y() - PADDING && y <= rb.y()) {
347 | //左下角
348 | dir = LEFTBOTTOM;
349 | this->setCursor(QCursor(Qt::SizeBDiagCursor));
350 | } else if(x <= rb.x() && x >= rb.x() - PADDING && y >= tl.y() && y <= tl.y() + PADDING) {
351 | // 右上角
352 | dir = RIGHTTOP;
353 | this->setCursor(QCursor(Qt::SizeBDiagCursor));
354 | } else if(x <= tl.x() + PADDING && x >= tl.x()) {
355 | // 左边
356 | dir = LEFT;
357 | this->setCursor(QCursor(Qt::SizeHorCursor));
358 | } else if( x <= rb.x() && x >= rb.x() - PADDING) {
359 | // 右边
360 | dir = RIGHT;
361 | this->setCursor(QCursor(Qt::SizeHorCursor));
362 | }else if(y >= tl.y() && y <= tl.y() + PADDING){
363 | // 上边
364 | dir = UP;
365 | this->setCursor(QCursor(Qt::SizeVerCursor));
366 | } else if(y <= rb.y() && y >= rb.y() - PADDING) {
367 | // 下边
368 | dir = DOWN;
369 | this->setCursor(QCursor(Qt::SizeVerCursor));
370 | }else {
371 | // 默认
372 | dir = NONE;
373 | this->setCursor(QCursor(Qt::ArrowCursor));
374 | }
375 | }
376 | void YbQuickView::slotFinishedAnimation1()
377 | {
378 |
379 | isHide =false;
380 | finishedshowAni = true;
381 | if(this->y() <=-10)
382 | {
383 | this->setPosition(this->x(),-10);
384 | }
385 | //qDebug()<<"slotFinishedAnimation1 "<position();
386 | this->show();
387 | delete group2;
388 | }
389 |
390 | void YbQuickView::slotFinishedAnimation2()
391 | {
392 | isHide =true;
393 | finishedhideAni = true;
394 | delete group3;
395 | if(this->y() <=-10)
396 | {
397 | this->setPosition(this->x(),-10);
398 | }
399 | this->show();
400 | }
401 | ///
402 | /// \brief YbQuickView::slotShowMaxAndNormal
403 | /// \param showMax
404 | /// 你可以注册该方法到QML当中
405 | void YbQuickView::slotShowMaxAndNormal(bool showMax)
406 | {
407 | if(m_Obj){
408 | QVariant returnVal;
409 | QMetaObject::invokeMethod(m_Obj,"transToQml",Q_RETURN_ARG(QVariant,returnVal),
410 | Q_ARG(QVariant,showMax));
411 | }
412 | }
413 | ///
414 | /// \brief YbQuickView::slotRecevQmlReq
415 | /// \param var
416 | /// \param cmd
417 | /// 接受来自QML的请求
418 | void YbQuickView::slotRecevQmlReq(QVariant var, QString cmd)
419 | {
420 | if(var.toString()=="system"){
421 | if(cmd == "close"){
422 | this->close();
423 | qApp->quit();
424 | }else if(cmd == "min"){
425 | this->showMinimized();
426 | }
427 | }
428 |
429 | }
430 |
--------------------------------------------------------------------------------
/ddui/ddquickview.h:
--------------------------------------------------------------------------------
1 | #ifndef YBQUICKVIEW_H
2 | #define YBQUICKVIEW_H
3 |
4 | #include
5 | #include
6 | #include
7 |
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 | #include "youzan/youzanobject.h"
19 | #include "model/bdtablemodel.h"
20 |
21 | enum Direction{
22 | UP = 0,
23 | DOWN=1,
24 | LEFT,
25 | RIGHT,
26 | LEFTTOP,
27 | LEFTBOTTOM,
28 | RIGHTBOTTOM,
29 | RIGHTTOP,
30 | NONE
31 | };
32 |
33 | #define PADDING 5
34 | class YbQuickView : public QQuickView
35 | {
36 | Q_OBJECT
37 | public:
38 | explicit YbQuickView(QQuickView *parent = 0);
39 | ~YbQuickView();
40 |
41 | void setMaxYbView(QSize);
42 | void setHasMouse(bool isHasMouse);
43 |
44 | void setSourceAndRegsiterObj(const QUrl& url,bool regsiter=true);
45 |
46 | Q_INVOKABLE void setCanMoveRange(const QPoint& point);
47 |
48 | bool isHasMouseEvent;
49 | bool finishedhideAni;
50 | bool isHide;
51 | bool isZhiding;
52 | bool isMax;
53 |
54 | bool finishedshowAni;
55 | int iHeight;
56 | QParallelAnimationGroup* group;
57 | QParallelAnimationGroup* group2;
58 | QParallelAnimationGroup* group3;
59 | QParallelAnimationGroup* group4;
60 |
61 | private:
62 | void region(const QPoint &cursorPoint);
63 | protected:
64 | void mouseReleaseEvent(QMouseEvent *event);
65 | void mouseMoveEvent(QMouseEvent *event);
66 | void mousePressEvent(QMouseEvent *event);
67 | void mouseDoubleClickEvent(QMouseEvent *event);
68 | bool event(QEvent *);
69 | private:
70 | bool isLeftPressDown;
71 | QPoint dragPosition,moveRangePostion;
72 | Direction dir;
73 | bool canMove;
74 |
75 | QObject *m_Obj;
76 | YouZanObject yZObj;
77 | BDTableModel mTableModel;
78 | BDTableModel mMyModel;
79 | public slots:
80 | void slotFinishedAnimation1();
81 | void slotFinishedAnimation2();
82 |
83 | void slotShowMaxAndNormal(bool showMax = true);
84 |
85 | void slotRecevQmlReq(QVariant var,QString cmd);
86 | void showTrayIcon();
87 | };
88 |
89 | #endif // YBQUICKVIEW_H
90 |
--------------------------------------------------------------------------------
/ddui/ddview.cpp:
--------------------------------------------------------------------------------
1 | #include "ddview.h"
2 | #include
3 |
4 | DDView::DDView(QQuickView *parent):
5 | QQuickView(parent),
6 | m_shadowSize(5)
7 | {
8 | setColor(Qt::transparent);
9 | setResizeMode(QQuickView::SizeRootObjectToView);
10 | }
11 |
12 | DDView::~DDView()
13 | {
14 |
15 | }
16 |
17 | void DDView::keyPressEvent(QKeyEvent *e)
18 | {
19 | return QQuickView::keyPressEvent(e);
20 | }
21 |
22 | void DDView::keyReleaseEvent(QKeyEvent *e)
23 | {
24 | return QQuickView::keyReleaseEvent(e);
25 | }
26 |
27 | void DDView::mouseMoveEvent(QMouseEvent *e)
28 | {
29 | return QQuickView::mouseMoveEvent(e);
30 | }
31 |
32 | void DDView::mousePressEvent(QMouseEvent *e)
33 | {
34 | return QQuickView::mousePressEvent(e);
35 | }
36 |
37 | void DDView::mouseReleaseEvent(QMouseEvent *e)
38 | {
39 | return QQuickView::mouseReleaseEvent(e);
40 | }
41 | #ifdef Q_OS_WIN
42 | bool DDView::nativeEvent(const QByteArray &eventType, void *message, long *result)
43 | {
44 | if (this->minimumHeight() >= this->maximumHeight()
45 | && this->minimumWidth() >= this->maximumWidth())
46 | {
47 | return QQuickView::nativeEvent(eventType, message, result);
48 | }
49 | Q_UNUSED(eventType)
50 | MSG *param = static_cast(message);
51 | switch (param->message)
52 | {
53 | case WM_NCHITTEST:
54 | {
55 | // qDebug()<winId();
57 | int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();
58 | int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();
59 |
60 | //指定标题栏区域
61 | if (0)
62 | {
63 | return false;
64 | }
65 | else
66 | {
67 | *result = HTCAPTION;
68 | }
69 |
70 | //如果窗口最大化了,则不支持resize
71 | if (IsZoomed(hWnd))
72 | return true;
73 | if (this->windowState() == Qt::WindowMaximized)
74 | return true;
75 | if (nX > 0 && nX < this->m_shadowSize)
76 | *result = HTLEFT;
77 | if (nX > this->width() - this->m_shadowSize && nX < this->width())
78 | *result = HTRIGHT;
79 | if (nY > 0 && nY < this->m_shadowSize)
80 | *result = HTTOP;
81 | if (nY > this->height() - this->m_shadowSize && nY < this->height())
82 | *result = HTBOTTOM;
83 | if (nX > 0 && nX < this->m_shadowSize && nY > 0 && nY < this->m_shadowSize)
84 | *result = HTTOPLEFT;
85 | if (nX > this->width() - this->m_shadowSize && nX < this->width() && nY > 0 && nY < this->m_shadowSize)
86 | *result = HTTOPRIGHT;
87 | if (nX > 0 && nX < this->m_shadowSize && nY > this->height() - this->m_shadowSize && nY < this->height())
88 | *result = HTBOTTOMLEFT;
89 | if (nX > this->width() - this->m_shadowSize && nX < this->width()
90 | && nY > this->height() - this->m_shadowSize && nY < this->height())
91 | *result = HTBOTTOMRIGHT;
92 | return true;// QQuickView::nativeEvent(eventType, message, result);;
93 | }
94 | default:{
95 | return QQuickView::nativeEvent(eventType, message, result);
96 | }
97 | }
98 | return QQuickView::nativeEvent(eventType, message, result);;
99 | }
100 | #endif
101 |
--------------------------------------------------------------------------------
/ddui/ddview.h:
--------------------------------------------------------------------------------
1 | #ifndef DDVIEW_H
2 | #define DDVIEW_H
3 |
4 | #include
5 | #include
6 | #ifdef Q_OS_WIN
7 | #include
8 | #endif
9 | #include
10 |
11 | class DDView : public QQuickView
12 | {
13 | Q_OBJECT
14 | public:
15 | explicit DDView(QQuickView *parent = 0);
16 | ~DDView();
17 |
18 | protected:
19 | virtual void keyPressEvent(QKeyEvent *e);
20 | virtual void keyReleaseEvent(QKeyEvent *e);
21 | virtual void mouseMoveEvent(QMouseEvent *e);
22 | virtual void mousePressEvent(QMouseEvent *e);
23 | virtual void mouseReleaseEvent(QMouseEvent *e);
24 | #ifdef Q_OS_WIN
25 | #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
26 | bool nativeEvent(const QByteArray &eventType, void *message, long *result);
27 | #else
28 | bool winEvent ( MSG * message, long * result );
29 | #endif
30 | #endif
31 | private:
32 | int m_shadowSize;
33 | };
34 |
35 | #endif // DDVIEW_H
36 |
--------------------------------------------------------------------------------
/deployment.pri:
--------------------------------------------------------------------------------
1 | android-no-sdk {
2 | target.path = /data/user/qt
3 | export(target.path)
4 | INSTALLS += target
5 | } else:android {
6 | x86 {
7 | target.path = /libs/x86
8 | } else: armeabi-v7a {
9 | target.path = /libs/armeabi-v7a
10 | } else {
11 | target.path = /libs/armeabi
12 | }
13 | export(target.path)
14 | INSTALLS += target
15 | } else:unix {
16 | isEmpty(target.path) {
17 | qnx {
18 | target.path = /tmp/$${TARGET}/bin
19 | } else {
20 | target.path = /opt/$${TARGET}/bin
21 | }
22 | export(target.path)
23 | }
24 | INSTALLS += target
25 | }
26 |
27 | export(INSTALLS)
28 |
--------------------------------------------------------------------------------
/driver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/driver.png
--------------------------------------------------------------------------------
/images/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/128.png
--------------------------------------------------------------------------------
/images/360/btm/qinglilaji_yijianqingli_Anima_Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/qinglilaji_yijianqingli_Anima_Hover.png
--------------------------------------------------------------------------------
/images/360/btm/qinglilaji_yijianqingli_Anima_Leave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/qinglilaji_yijianqingli_Anima_Leave.png
--------------------------------------------------------------------------------
/images/360/btm/shamuma_new_Anima_Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/shamuma_new_Anima_Hover.png
--------------------------------------------------------------------------------
/images/360/btm/shamuma_new_Anima_Leave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/shamuma_new_Anima_Leave.png
--------------------------------------------------------------------------------
/images/360/btm/youhuajiasu_Anima_Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/youhuajiasu_Anima_Hover.png
--------------------------------------------------------------------------------
/images/360/btm/youhuajiasu_Anima_Leave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/btm/youhuajiasu_Anima_Leave.png
--------------------------------------------------------------------------------
/images/360/main/360logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/360logo.ico
--------------------------------------------------------------------------------
/images/360/main/MedalUnLight2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/MedalUnLight2.png
--------------------------------------------------------------------------------
/images/360/main/Skin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/Skin.png
--------------------------------------------------------------------------------
/images/360/main/android_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/android_48.png
--------------------------------------------------------------------------------
/images/360/main/assistant_qt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/assistant_qt.png
--------------------------------------------------------------------------------
/images/360/main/background_mainwnd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/background_mainwnd.jpg
--------------------------------------------------------------------------------
/images/360/main/btn_examine_now.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_examine_now.png
--------------------------------------------------------------------------------
/images/360/main/btn_fix_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_fix_all.png
--------------------------------------------------------------------------------
/images/360/main/btn_fix_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_fix_background.png
--------------------------------------------------------------------------------
/images/360/main/btn_install_360sd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_install_360sd.png
--------------------------------------------------------------------------------
/images/360/main/btn_reexamine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_reexamine.png
--------------------------------------------------------------------------------
/images/360/main/btn_run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_run.png
--------------------------------------------------------------------------------
/images/360/main/btn_scan_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_scan_background.png
--------------------------------------------------------------------------------
/images/360/main/btn_view_detail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/btn_view_detail.png
--------------------------------------------------------------------------------
/images/360/main/chart_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/chart_48.png
--------------------------------------------------------------------------------
/images/360/main/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/close.png
--------------------------------------------------------------------------------
/images/360/main/detail_button_onekey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/detail_button_onekey.png
--------------------------------------------------------------------------------
/images/360/main/dl_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/dl_logo.png
--------------------------------------------------------------------------------
/images/360/main/feedback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/feedback.png
--------------------------------------------------------------------------------
/images/360/main/jjx_winpe_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/jjx_winpe_normal.png
--------------------------------------------------------------------------------
/images/360/main/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/menu.png
--------------------------------------------------------------------------------
/images/360/main/min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/min.png
--------------------------------------------------------------------------------
/images/360/main/more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/more.png
--------------------------------------------------------------------------------
/images/360/main/payinsure_icon_360cr_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/payinsure_icon_360cr_normal.png
--------------------------------------------------------------------------------
/images/360/main/payinsure_safe_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/payinsure_safe_hover.png
--------------------------------------------------------------------------------
/images/360/main/payinsure_safe_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/payinsure_safe_normal.png
--------------------------------------------------------------------------------
/images/360/main/payinsure_safe_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/payinsure_safe_press.png
--------------------------------------------------------------------------------
/images/360/main/security_safe_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/security_safe_hover.png
--------------------------------------------------------------------------------
/images/360/main/security_safe_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/security_safe_normal.png
--------------------------------------------------------------------------------
/images/360/main/security_safe_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/security_safe_press.png
--------------------------------------------------------------------------------
/images/360/main/share_weibo_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/share_weibo_icon.png
--------------------------------------------------------------------------------
/images/360/main/update_btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/update_btn.png
--------------------------------------------------------------------------------
/images/360/main/v_line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/v_line.png
--------------------------------------------------------------------------------
/images/360/main/win10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/360/main/win10.png
--------------------------------------------------------------------------------
/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/close.png
--------------------------------------------------------------------------------
/images/close_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/close_hover.png
--------------------------------------------------------------------------------
/images/close_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/close_pressed.png
--------------------------------------------------------------------------------
/images/matrix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/matrix.png
--------------------------------------------------------------------------------
/images/mid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/mid.jpg
--------------------------------------------------------------------------------
/images/qr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/qr.jpg
--------------------------------------------------------------------------------
/images/right.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/images/right.jpg
--------------------------------------------------------------------------------
/imgqrc.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | images/128.png
4 | images/qr.jpg
5 | 360logo.ico
6 | images/360/btm/qinglilaji_yijianqingli_Anima_Hover.png
7 | images/360/btm/qinglilaji_yijianqingli_Anima_Leave.png
8 | images/360/btm/shamuma_new_Anima_Hover.png
9 | images/360/btm/shamuma_new_Anima_Leave.png
10 | images/360/btm/youhuajiasu_Anima_Hover.png
11 | images/360/btm/youhuajiasu_Anima_Leave.png
12 | images/360/main/360logo.ico
13 | images/360/main/android_48.png
14 | images/360/main/assistant_qt.png
15 | images/360/main/background_mainwnd.jpg
16 | images/360/main/btn_examine_now.png
17 | images/360/main/btn_fix_all.png
18 | images/360/main/btn_fix_background.png
19 | images/360/main/btn_install_360sd.png
20 | images/360/main/btn_reexamine.png
21 | images/360/main/btn_run.png
22 | images/360/main/btn_scan_background.png
23 | images/360/main/btn_view_detail.png
24 | images/360/main/chart_48.png
25 | images/360/main/close.png
26 | images/360/main/detail_button_onekey.png
27 | images/360/main/dl_logo.png
28 | images/360/main/feedback.png
29 | images/360/main/jjx_winpe_normal.png
30 | images/360/main/MedalUnLight2.png
31 | images/360/main/menu.png
32 | images/360/main/min.png
33 | images/360/main/more.png
34 | images/360/main/payinsure_icon_360cr_normal.png
35 | images/360/main/payinsure_safe_hover.png
36 | images/360/main/payinsure_safe_normal.png
37 | images/360/main/payinsure_safe_press.png
38 | images/360/main/security_safe_hover.png
39 | images/360/main/security_safe_normal.png
40 | images/360/main/security_safe_press.png
41 | images/360/main/share_weibo_icon.png
42 | images/360/main/Skin.png
43 | images/360/main/update_btn.png
44 | images/360/main/v_line.png
45 | images/360/main/win10.png
46 | images/close.png
47 | images/close_hover.png
48 | images/close_pressed.png
49 | images/mid.jpg
50 | images/right.jpg
51 |
52 |
53 |
--------------------------------------------------------------------------------
/main.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include "ddui/ddview.h"
6 | #include "ddui/ddquickview.h"
7 | #include "ddui/ddnewquickwindow.h"
8 |
9 | #define USE_NEW_WINDOW 1
10 |
11 | int main(int argc, char *argv[])
12 | {
13 | QApplication app(argc, argv);
14 | QApplication::setQuitOnLastWindowClosed(false);
15 | QFont font;
16 | font.setFamily("Microsoft YaHei");
17 | font.setPixelSize(12);
18 | app.setFont(font);
19 | #ifdef USE_NEW_WINDOW
20 | YbQuickView view;
21 | view.setFlags(Qt::FramelessWindowHint|Qt::Window);
22 | view.setHasMouse(false);
23 | #ifndef QT_NO_DEBUG
24 | view.setSourceAndRegsiterObj(QUrl::fromLocalFile("Driver/DDDriverView.qml"));
25 | #else
26 | view.setSourceAndRegsiterObj(QUrl("qrc:/Driver/DDDriverView.qml"));
27 | #endif
28 | view.showTrayIcon();
29 | view.show();
30 | view.setCanMoveRange(QPoint(view.width(),50));
31 | #else
32 |
33 | DDNewQuickWindow window;
34 | window.setFlags(Qt::FramelessWindowHint|Qt::Window);
35 | window.setSourceAndRegsiterObj(QUrl::fromLocalFile("Poetry/DDPoeTryPage.qml"));
36 | window.show();
37 | window.showTrayIcon();
38 | #endif
39 | return app.exec();
40 | }
41 |
--------------------------------------------------------------------------------
/matrix/MatrixItem.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | Canvas {
4 | id: canvas
5 | width: 100
6 | height: 200
7 | property bool userHor: true
8 | property int speedinterval: 40
9 | property var context
10 | property var w: 0
11 | property var h: 0
12 | property var drop:[]
13 | property var wordsArr:[]
14 | property var font_size: 16
15 |
16 | property var clearColor: 'rgba(0, 0, 0, .1)'; //每次循环加0.1透明的蒙层
17 | property var lttime: 0
18 | property var columns: 0; // 字体下落速度
19 | property var wordColor
20 | property var words
21 | property var textColor: "green"
22 | onPaint: {
23 | var context = canvas.getContext("2d");
24 | drawMatrix(context);
25 | }
26 | onWidthChanged: {
27 | initData()
28 | }
29 |
30 | Timer{
31 | id:timeId
32 | interval: speedinterval; running: true; repeat: true
33 | onTriggered: {
34 | requestPaint()
35 | }
36 | }
37 | //以下为js函数 绘制
38 | function drawMatrix(context){
39 | context.fillStyle = clearColor;
40 | context.fillRect(0,0,canvas.width,canvas.height);
41 | context.fillStyle=textColor;
42 | context.font = font_size+"px arial";
43 | for(var i=0;i(canvas.height*2/3)&&Math.random()>0.85)/*reset*/
48 | drop[i]=0;
49 | }else{
50 | context.fillText(text,drop[i]*font_size,i*font_size);/*get 0 and 1*/
51 | if(drop[i]*font_size>(canvas.width*2/3)&&Math.random()>0.85)/*reset*/
52 | drop[i]=0;
53 | }
54 | drop[i]++;
55 | }
56 | }
57 | function initData(){
58 | words = "0123456789qwertyuiopasdfghjklzxcvbnm,./;'\大数据[]QWERTYUIOP{}ASDFGHJHJKL:ZXCVBBNM<>?がガぎギぐグげゲごゴきゃキャきゅキュきょキョりゃリャゅリュりょリョ"
59 | wordsArr = words.split('')
60 | drop=[];
61 | font_size =16;
62 | if(userHor){
63 | columns = canvas.width/font_size;
64 | }else{
65 | columns = canvas.height/font_size;
66 | }
67 | console.log("--cal--columns-------- "+columns)
68 | for(var i=0;i
3 |
4 | BDTableModel::BDTableModel(QObject *parent)
5 | : QAbstractTableModel(parent)
6 | {
7 | mObjDataList.clear();
8 | // initData();
9 | }
10 |
11 | void BDTableModel::initData(int count)
12 | {
13 | if(count <0)return;
14 | for(int i=0;i &list)
27 | {
28 | mObjDataList.append(list);
29 | }
30 |
31 | void BDTableModel::addDataList(const BDTableObject &listStu)
32 | {
33 | beginInsertRows(QModelIndex(), rowCount(), rowCount());
34 | mObjDataList << listStu;
35 | endInsertRows();
36 | }
37 |
38 | void BDTableModel::addRowData(int row, const BDTableObject &data)
39 | {
40 | if(row < 0 || row > mObjDataList.size()-1)return;
41 | mObjDataList.insert(row,data);
42 | insertRows(row,1,this->index(0,0).parent());
43 | }
44 |
45 | void BDTableModel::removeRowData(int row)
46 | {
47 | if(row <0 || row > mObjDataList.size()-1)return;
48 | mObjDataList.removeAt(row);
49 | removeRows(row,1,this->index(0,0).parent());
50 | }
51 |
52 | int BDTableModel::rowCount(const QModelIndex &parent) const
53 | {
54 | // if (!parent.isValid())
55 | // return 0;
56 | return mObjDataList.size();
57 | // FIXME: Implement me!
58 | }
59 |
60 | int BDTableModel::columnCount(const QModelIndex &parent) const
61 | {
62 | return 6;
63 | // FIXME: Implement me!
64 | }
65 |
66 | QVariant BDTableModel::data(const QModelIndex &index, int role) const
67 | {
68 | // qDebug()< BDTableModel::roleNames() const
110 | {
111 | QHash hashData;
112 | hashData.insert(FIVE,"checked");
113 | hashData.insert(FIRST,"dessert");
114 | hashData.insert(SECONDE,"dbtype" );
115 | hashData.insert(THREE,"flat" );
116 | hashData.insert(FOUR,"carbs" );
117 | hashData.insert(SIX,"comboLst" );
118 | return hashData;
119 | }
120 |
121 |
122 | QStringList BDTableModel::userRoleNames()
123 | {
124 | QMap res;
125 | QHashIterator i(roleNames());
126 | while (i.hasNext()) {
127 | i.next();
128 | // if(i.key() > Qt::UserRole)
129 | res[i.key()] = i.value();
130 | }
131 | return res.values();
132 | }
133 |
--------------------------------------------------------------------------------
/model/bdtablemodel.h:
--------------------------------------------------------------------------------
1 | #ifndef BDTABLEMODEL_H
2 | #define BDTABLEMODEL_H
3 |
4 | #include
5 | typedef struct tagBDTableInfo{
6 | QString dessert;
7 | QString type;
8 | QString flat;
9 | QString carbs;
10 | bool checked;
11 | QStringList comBoxList;
12 | tagBDTableInfo(){
13 | checked = false;
14 | comBoxList.clear();
15 | comBoxList<<"111"<<"2222"<<"3333444"<<"54"<<"65";
16 | }
17 | }BDTableInfo;
18 |
19 | enum BDTableEnum{
20 | FIRST = 0x00000,
21 | SECONDE,
22 | THREE,
23 | FOUR,
24 | FIVE,
25 | SIX
26 | };
27 |
28 | class BDTableObject
29 | {
30 | public:
31 | BDTableObject(){}
32 | BDTableObject(const BDTableObject& other):
33 | m_dessert(other.dessert())
34 | ,m_type(other.type())
35 | ,m_flat(other.flat())
36 | ,m_carbs(other.carbs())
37 | ,m_checked(other.checked())
38 | ,m_comboxLst(other.comboxLst())
39 | {
40 |
41 | }
42 |
43 | BDTableObject(const BDTableInfo& info):
44 | m_dessert(info.dessert)
45 | ,m_type(info.type)
46 | ,m_flat(info.flat)
47 | ,m_carbs(info.carbs)
48 | ,m_checked(info.checked)
49 | ,m_comboxLst(info.comBoxList)
50 | {
51 |
52 | }
53 |
54 | QString dessert() const{return m_dessert;}
55 | QString type() const{return m_type;}
56 | QString flat() const{return m_flat;}
57 | QString carbs() const{return m_carbs;}
58 | QStringList comboxLst() const{return m_comboxLst;}
59 | bool checked() const{return m_checked;}
60 |
61 | void setDessert(const QString& dessert){m_dessert = dessert;}
62 | void setType(const QString& type){m_type = type;}
63 | void setFlat(const QString& flat){m_flat = flat;}
64 | void setCarbs(const QString& carbs){m_carbs = carbs;}
65 | void setComboxLst(const QStringList& cmLst){m_comboxLst = cmLst;}
66 | void setChecked(const bool& checked){m_checked = checked;}
67 | private:
68 | QString m_dessert;
69 | QString m_type;
70 | QString m_flat;
71 | QString m_carbs;
72 | QStringList m_comboxLst;
73 | bool m_checked;
74 | };
75 |
76 | class BDTableModel : public QAbstractTableModel
77 | {
78 | Q_OBJECT
79 |
80 | public:
81 | explicit BDTableModel(QObject *parent = 0);
82 | Q_INVOKABLE void initData(int count = 5);
83 | void addDataList(const QList& list);
84 | void addDataList(const BDTableObject& listStu);
85 |
86 | void addRowData(int row,const BDTableObject& data);
87 | void removeRowData(int row);
88 | // Basic functionality:
89 | Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
90 | int columnCount(const QModelIndex &parent = QModelIndex()) const override;
91 |
92 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
93 | // Add data:
94 | bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
95 | // Remove data:
96 | bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
97 | virtual QHash roleNames() const;
98 | Q_INVOKABLE QStringList userRoleNames();
99 |
100 | private:
101 | QList mObjDataList;
102 | };
103 |
104 | #endif // BDTABLEMODEL_H
105 |
--------------------------------------------------------------------------------
/poetry/DDPoeComing.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | Rectangle {
4 | color: Qt.rgba(Math.random(),Math.random(),Math.random(),1)
5 |
6 | Text {
7 | id: popTxt
8 | anchors.fill: parent
9 | text: "诗词歌赋 待开发 "
10 | renderType: Text.NativeRendering
11 | horizontalAlignment: Text.AlignHCenter
12 | verticalAlignment: Text.AlignVCenter
13 | color: "white"
14 | font.pixelSize: 33
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/poetry/DDPoeTryPage.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 | import QtQuick.Window 2.1
3 | import "../ddui" as DDui
4 |
5 | DDui.DDAbstractView {
6 | id:driverUi
7 | visible: true
8 | width: 816
9 | height: 600
10 | DDui.DDuiShadowBg{
11 | id:bg
12 | width: driverUi.width
13 | height: driverUi.height
14 | bgmarigns: driverUi.bgMarign
15 | DDPoeTryView{
16 | color: "#b3b3b3"
17 | anchors.fill: parent
18 | anchors.margins: driverUi.bgMarign
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/poetry/DDPoeTryView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Layouts 1.1
3 |
4 | import "../ddui" as DDui
5 |
6 | Rectangle{
7 | DDui.DDTopBar {
8 | width: parent.width
9 | Layout.maximumHeight: 100
10 | Layout.minimumHeight: 100
11 | height: 100
12 | color: "#808080"
13 | }
14 | DDui.DDBottomBar {
15 | Layout.maximumHeight: 30
16 | Layout.minimumHeight: 30
17 | height: 30
18 | width: parent.width
19 | anchors.margins: 0
20 | anchors.bottom: parent.bottom
21 | color: "#1e1e1e"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/qml.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | QQ/DDQQPageView.qml
4 | XunLei/DDXunLei.qml
5 | XunLei/DDXunView.qml
6 | XunLei/DDXunGridView.qml
7 | XunLei/DDXunLocalView.qml
8 | QQ/DDQQMainView.qml
9 | Driver/DDDriverView.qml
10 | Driver/BDTableView.qml
11 | Driver/DDTabView.qml
12 | youzan/youzan.js
13 | youzan/youzhan.json
14 | youzan/qml.qrc
15 | youzan/YouzanApi.pro
16 | youzan/deployment.pri
17 | youzan/DDAbstractView.qml
18 | youzan/DDCloseButton.qml
19 | youzan/DDuiShadowBg.qml
20 | youzan/YouZanAnimation.qml
21 | youzan/YouZanApi.qml
22 | youzan/YouzanBottomGroup.qml
23 | youzan/YouzanItem.qml
24 | youzan/YouZanMain.qml
25 | youzan/YouzanSlider.qml
26 | youzan/YouzanTextTime.qml
27 | youzan/YouZanView.qml
28 | youzan/YouZanWindow.qml
29 | youzan/YZCalView.qml
30 | 360/BottomBar.qml
31 | 360/MainPage.qml
32 | 360/Mainview.qml
33 | 360/MidChangePart.qml
34 | 360/MidPage.qml
35 | 360/TopBar.qml
36 | 360/common/AnimationButton.qml
37 | 360/common/CustomButton.qml
38 | 360/common/CustomProgressBar.qml
39 | 360/common/DDImage.qml
40 | 360/common/DDText.qml
41 | 360/common/SigleButton.qml
42 | 360/common/Win10Setting.qml
43 | ddui/DDAbstractView.qml
44 | ddui/DDBottomBar.qml
45 | ddui/DDCloseButton.qml
46 | ddui/DDHomeButton.qml
47 | ddui/DDMidView.qml
48 | ddui/DDSplitView.qml
49 | ddui/DDTopBar.qml
50 | ddui/DDuiShadowBg.qml
51 | Driver/DDDynamicTable.qml
52 | poetry/DDPoeTryPage.qml
53 | poetry/DDPoeTryView.qml
54 | matrix/MatrixItem.qml
55 | poetry/DDPoeComing.qml
56 |
57 |
58 |
--------------------------------------------------------------------------------
/youzan/DDAbstractView.qml:
--------------------------------------------------------------------------------
1 | /*
2 | This is a base root qml view and all requset can trans to C++
3 | like Qt all signls and slot can be followed by this childrens
4 | */
5 | import QtQuick 2.1
6 |
7 | Item {
8 | visible: true
9 | width: 816
10 | height: 600
11 | property double bgMarign: 8
12 | //you can emit this signal to c++
13 | signal signalQmlOptions(variant msg,string type);
14 |
15 | //max and normal window states
16 | function transToQml(showMax){
17 | if(showMax){
18 | bgMarign = 0;
19 | }else{
20 | bgMarign = 8;
21 | }
22 | }
23 | MouseArea{
24 | id:ma
25 | anchors.fill: parent
26 | acceptedButtons: Qt.LeftButton
27 | property int ix:0
28 | property int iy:0
29 | onPressed:{
30 | ma.ix = mouseX;
31 | ma.iy = mouseY;
32 | }
33 | onPositionChanged: {
34 | var dyx = mouseX - ma.ix;
35 | var dyy = mouseY - ma.iy;
36 | var arryTmp = [dyx,dyy];
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/youzan/DDCloseButton.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.1
2 | import "./youzan.js" as YSTHEME
3 |
4 | Rectangle{
5 | id:closeBtn
6 | width: 32
7 | height: width
8 | property bool hasMouse: false
9 | color:hasMouse?"#D44027": "transparent"
10 | signal signalCloseApp();
11 | MouseArea{
12 | id:ma
13 | anchors.fill: closeBtn
14 | hoverEnabled: true
15 | onClicked: {
16 | signalCloseApp();
17 | }
18 | onEntered: {
19 | closeBtn.hasMouse = true;
20 | }
21 | onExited: {
22 | closeBtn.hasMouse = false;
23 | }
24 | }
25 | Text {
26 | id: btntext
27 | anchors.fill: parent
28 | text: "X"
29 | horizontalAlignment: Text.AlignHCenter
30 | verticalAlignment: Text.AlignVCenter
31 | color:closeBtn.hasMouse?"white": "grey"
32 | font.pixelSize: 18
33 | font.family: YSTHEME.textfontfamily
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/youzan/DDuiShadowBg.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtGraphicalEffects 1.0
3 |
4 | Rectangle {
5 | //最底层透明图层
6 | width: 480;
7 | height: 680;
8 | color: "transparent"
9 | property double bgmarigns: 8.0
10 | property int listViewActive: 0
11 | Item {
12 | //主体窗口
13 | id: container;
14 | anchors.centerIn: parent;
15 | width: parent.width;
16 | height: parent.height;
17 | Rectangle {
18 | id: mainRect
19 | width: container.width-(2*rectShadow.radius);
20 | height: container.height - (2*rectShadow.radius);
21 | anchors.centerIn: parent;
22 | //以下省略
23 | }
24 | }
25 | DropShadow {//绘制阴影
26 | id: rectShadow;
27 | anchors.fill: source
28 | cached: true;
29 | horizontalOffset: 0;
30 | verticalOffset: 3;
31 | radius: bgmarigns;
32 | samples: 16;
33 | color: "#80000000";
34 | smooth: true;
35 | source: container;
36 | }
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/youzan/README.md:
--------------------------------------------------------------------------------
1 | About YouzhanApi
2 | ==================
3 |
4 | Original source file token from DDui company
5 |
6 | http://www.heilqt.com/
7 |
8 | How to build
9 | ==================================
10 |
11 | This project can only be compiled using Qt5.0.x or later
12 |
13 | Just open the YouzhanApi.pro using Qt Creator, then build&run should work.
14 |
15 | Notes for building on Windows or MacOsx:
16 |
17 | Functions:
18 | you can use it to compare some assign website about medical
19 | and you can use it to chat with local area network
20 |
--------------------------------------------------------------------------------
/youzan/YZCalView.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls.Styles 1.2
3 | import QtQuick.Controls 1.2
4 | import "./youzan.js" as YSTHEME
5 |
6 | Calendar {
7 | id:caleView
8 | width:230
9 | height:230
10 | frameVisible:false
11 | style: CalendarStyle {
12 | gridVisible: false
13 | background:Item{
14 | width: caleView.width
15 | height: caleView.height
16 | }
17 | navigationBar:Item{
18 | width: caleView.width
19 | height: 30
20 | Image {
21 | id: pre
22 | width: 16
23 | height: 16
24 | anchors.right: navTxt.left
25 | anchors.verticalCenter: parent.verticalCenter
26 | source: "http://download.easyicon.net/png/15303/16/"
27 | MouseArea{
28 | id:preMa
29 | anchors.fill: parent
30 | onClicked: {
31 | caleView.showPreviousMonth();
32 | }
33 | }
34 | }
35 | Text {
36 | id: navTxt
37 | text: styleData.title
38 | font.family: YSTHEME.textfontfamily+2
39 | font.pixelSize: YSTHEME.textFontSize+2
40 | anchors.centerIn: parent
41 | width: 80
42 | height: 40
43 | color: YSTHEME.textBlackColor
44 | horizontalAlignment: Text.AlignHCenter
45 | verticalAlignment: Text.AlignVCenter
46 |
47 | }
48 | Image {
49 | id: next
50 | width: 16
51 | height: 16
52 | rotation: 180
53 | anchors.left: navTxt.right
54 | anchors.verticalCenter: parent.verticalCenter
55 | source: "http://download.easyicon.net/png/15303/16/"
56 | MouseArea{
57 | id:nextMa
58 | anchors.fill: parent
59 | onClicked: {
60 | caleView.showNextMonth();
61 | }
62 | }
63 | }
64 | }
65 | gridColor:Qt.rgba(0.2,0.2,0.2,0.9)
66 | dayOfWeekDelegate:Item{
67 | implicitWidth: 40
68 | implicitHeight: 30
69 | Text {
70 | id: name
71 | text: returnWeek(styleData.index)
72 | font.family: YSTHEME.textfontfamily
73 | font.pixelSize: YSTHEME.textFontSize+2
74 | anchors.fill: parent
75 | color: YSTHEME.textBlackColor
76 | horizontalAlignment: Text.AlignHCenter
77 | verticalAlignment: Text.AlignVCenter
78 | }
79 | }
80 | dayDelegate: Item {
81 | implicitWidth: 30
82 | implicitHeight: 30
83 | Rectangle {
84 | width: 30
85 | height: 30
86 | visible: styleData.selected
87 | radius:width/2
88 | border.width:1
89 | smooth: true
90 | border.color: styleData.selected ? YSTHEME.textRedColor:YSTHEME.textWhiteColor
91 | color: YSTHEME.btn_color//styleData.selected ? "red" : (styleData.visibleMonth && styleData.valid ? "#444" : "#00ffffff");
92 | }
93 | Label {
94 | text: styleData.date.getDate()
95 | width: 30
96 | height: 30
97 | font.pixelSize: YSTHEME.textFontSize+2
98 | font.family: YSTHEME.textfontfamily
99 | horizontalAlignment: Text.AlignHCenter
100 | verticalAlignment: Text.AlignVCenter
101 | color: (styleData.selected ?YSTHEME.textWhiteColor:(styleData.visibleMonth && styleData.valid ? YSTHEME.textBlackColor:"#454545"))
102 | }
103 | }
104 | }
105 | function returnWeek(index){
106 | //console.log("index??? "+index);
107 | var day = "一";
108 | switch(index){
109 | case 0:
110 | day = "日";
111 | break;
112 | case 1:
113 | day = "一";
114 | break;
115 | case 2:
116 | day = "二";
117 | break;
118 | case 3:
119 | day = "三";
120 | break;
121 | case 4:
122 | day = "四";
123 | break;
124 | case 5:
125 | day = "五";
126 | break;
127 | case 6:
128 | day = "六";
129 | break;
130 | }
131 | return day;
132 | }
133 | //设置起始时间的日历
134 | function setStartTimeCal(date){
135 | caleView.selectedDate = date;
136 | }
137 | }
138 |
139 |
--------------------------------------------------------------------------------
/youzan/YouZanAnimation.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "./youzan.js" as YSTHEME
3 |
4 | Rectangle {
5 | id:rightView
6 | width: 160
7 | height: 30
8 | color: "#00ffffff"
9 | signal signalDateEditChanged(int iType);//0 :start 1:end date
10 | signal signalDataCalChanged(var calDate);
11 | // border.color: "gray"
12 | // radius: 4
13 | Item{
14 | id:righttxt
15 | anchors.fill: parent
16 | anchors.margins: 2
17 | visible: righttxt.width!=0
18 | Rectangle {
19 | id:leftTime
20 | width: parent.width*4/9
21 | height: rightView.height-10
22 | anchors.verticalCenter: parent.verticalCenter
23 | border.color: "#8AC3F0"
24 | color: "#00ffffff"
25 | visible: righttxt.width!=0
26 | TextInput{
27 | id:leftInput
28 | anchors.fill: parent
29 | anchors.margins: 2
30 | font.pointSize :10
31 | font.family: YSTHEME.textfontfamily
32 | color: "white"
33 | visible: righttxt.width!=0
34 | onFocusChanged: {
35 | if(focus)
36 | signalDateEditChanged(0);
37 | }
38 | }
39 | }
40 | Text {
41 | id: name
42 | width: parent.width/9
43 | height: rightView.height-4
44 | horizontalAlignment: Text.AlignHCenter
45 | verticalAlignment: Text.AlignVCenter
46 | anchors.verticalCenter: parent.verticalCenter
47 | anchors.left: leftTime.right
48 | text: qsTr("至")
49 | color: YSTHEME.textWhiteColor
50 | font.family: YSTHEME.textfontfamily
51 | visible: righttxt.width!=0
52 | }
53 | Rectangle {
54 | id:rightTime
55 | width: parent.width*4/9
56 | height: rightView.height-10
57 | anchors.verticalCenter: parent.verticalCenter
58 | anchors.left: name.right
59 | border.color: "#8AC3F0"
60 | color: "#00ffffff"
61 | visible: righttxt.width!=0
62 | TextInput{
63 | id:rightInput
64 | anchors.fill: parent
65 | anchors.margins: 2
66 | font.pointSize :10
67 | color: "white"
68 | font.family: YSTHEME.textfontfamily
69 | visible: righttxt.width!=0
70 | onFocusChanged: {
71 | console.log("focus "+focus);
72 | if(focus)
73 | signalDateEditChanged(1);
74 | }
75 | }
76 | }
77 | }
78 |
79 | Behavior on width {
80 | PropertyAnimation { properties: "width";duration: 800; easing.type: Easing.InOutQuad }
81 | }
82 | onFocusChanged: {
83 | setrightviewHideOrShow(false);
84 | }
85 |
86 | Component.onCompleted: {
87 | leftInput.focus = false;
88 | rightInput.focus = false;
89 | leftInput.text = yugi(10);
90 | rightInput.text=getNowFormatDateLine();
91 | getbetweenData();
92 | }
93 |
94 | function getDatas(){
95 | var dateArr=[getYouzanDateLine(leftInput.text),getYouzanDateLine(rightInput.text)];
96 | return dateArr;
97 | }
98 |
99 | /*
100 | setting the right control bar to hide or show by animation
101 | */
102 | function setrightviewHideOrShow(isshow){
103 | if(!isshow){
104 | rightView.width=0;
105 | rightView.focus = false;
106 | righttxt.visible =false;
107 | console.log("离开该区域 进行隐藏")
108 |
109 | }else{
110 | rightView.focus = true;
111 | righttxt.visible =true;
112 | rightView.width=parent.width*0.4;
113 | console.log("进入该区域 进行动画显示")
114 | }
115 | }
116 |
117 | //得到查询终止时间
118 | function getNowFormatDateLine() {
119 | var date = new Date();
120 | var month = date.getMonth() + 1;
121 | var strDate = date.getDate();
122 | if (month >= 1 && month <= 9) {
123 | month = "0" + month;
124 | }
125 | if (strDate >= 0 && strDate <= 9) {
126 | strDate = "0" + strDate;
127 | }
128 | var currentdate = date.getFullYear() + month + strDate+"000000";
129 | return formatString(currentdate);
130 | }
131 | //得到查询起始时间
132 | function yugi(n){
133 | var now = new Date;
134 | now.setDate(now.getDate() - n);
135 | var month = now.getMonth() + 1;
136 | var strDate = now.getDate();
137 | if (month >= 1 && month <= 9) {
138 | month = "0" + month;
139 | }
140 | if (strDate >= 0 && strDate <= 9) {
141 | strDate = "0" + strDate;
142 | }
143 | signalDataCalChanged(now);
144 | var currentdate = now.getFullYear() + month + strDate+"000000";
145 | return formatString(currentdate);;
146 | }
147 |
148 | function getYouzanDateLine(datastring) {
149 | var date = new Date();
150 | var datestring = formatString(datastring);
151 | return datestring;
152 | }
153 | ///格式化时间格式 yyyy-MM-dd hh:mm:ss
154 |
155 | function formatString(str){
156 | var datastring = str.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/g,'$1-$2-$3 $4:$5:$6');
157 | // console.log("format date "+datastring);
158 | return datastring;
159 | }
160 |
161 | function setLefDateTimeString(strDate){
162 | leftInput.text = strDate;
163 | }
164 | function setRightDateTimeString(strDate){
165 | rightInput.text = strDate;
166 | }
167 | }
168 |
169 |
--------------------------------------------------------------------------------
/youzan/YouZanApi.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 |
3 | ListView{
4 | id:tradeView
5 | anchors.fill: parent
6 | clip: true
7 | property alias modelCount: tradesModel.count
8 | ListModel{
9 | id:tradesModel
10 | }
11 | model:4//tradesModel
12 | delegate: YouzanItem {
13 | id:zanItem
14 | height: tradeView.height-40
15 | width: parent.width
16 | zanId: zantid //订单号
17 | zanProductName:titlepro//商品名集合
18 | zanCount:countPro //数量
19 | zanPrice:pricepro//单价
20 | zanFee: fee //总价
21 | zanCreateTime: createTime //创建时间
22 | zantrade: paytype //交易类型
23 | zanAddress: address
24 | zanPhoneNum: phonenumber
25 | zanUserName:receiver_name
26 | // zanImg: imgpath
27 | onSignalClicked: {
28 | //每个订单的打印按钮
29 | yzObj.slotSetUseImagePrinf(usePrinfImg)
30 | if(usePrinfImg){
31 | yzObj.setCurrentPrintImage(saveItemToImage(zanId+".png"));
32 | }else{
33 | yzObj.setCurrentPrintContents(gethtmlcontents());
34 | }
35 | }
36 | onSignalOpenprinf: {
37 | yzObj.openPrinfDialog(true);
38 | }
39 | }
40 |
41 | function prinfMuch(){
42 | yzObj.slotSetUseImagePrinf(usePrinfImg)
43 | if(usePrinfImg){
44 | for(var i=0;i=yz.modelCount){
46 | yz.currentIndex = 0;
47 | }
48 | yzObj.setCurrentPrintImage(yz.currentItem.saveItemToImage(tradesModel.get(i).zantid));
49 | yz.currentIndex = i+1;
50 | }
51 | }else{
52 | for(var i=0;i=yz.modelCount){
54 | yz.currentIndex = 0;
55 | }
56 | yzObj.setCurrentPrintContents(yz.currentItem.gethtmlcontents());
57 | yz.currentIndex = i+1;
58 | }
59 | }
60 | yzObj.openPrinfDialog(true);
61 | }
62 |
63 | function searchTrades(startDate,endDate){
64 | tradesModel.clear();//清空列表
65 | var request=new XMLHttpRequest();
66 | var data;
67 | //监听onreadystatechange事件
68 | request.onreadystatechange=function(){
69 | if(request.readyState===request.DONE){
70 | console.log("-----有赞API已经返回了数据---- "+request.responseText.length);
71 | data=JSON.parse(request.responseText.toString());
72 | if(request.response === 'undefined'){
73 | return;
74 | }
75 | for(var i=0;i=0
86 | MouseArea{
87 | id:ma2
88 | anchors.fill: parent
89 | hoverEnabled: true
90 | onEntered: {
91 | refreshBtn.color = "#12aacc";
92 | }
93 | onExited: {
94 | refreshBtn.color = "#12AADF";
95 | }
96 | onClicked: {
97 | yz.prinfMuch();
98 | }
99 | }
100 |
101 | Text {
102 | text: "批量打印"
103 | anchors.fill: parent
104 | horizontalAlignment: Text.AlignHCenter
105 | verticalAlignment: Text.AlignVCenter
106 | color: "white"
107 | font.family: YSTHEME.textfontfamily
108 | font.pixelSize: YSTHEME.textFontSize
109 | }
110 | }
111 | //右侧的刷新按钮
112 | Rectangle{
113 | id:refreshBtn
114 | width: 80
115 | height: 80
116 | radius: 40
117 | anchors.bottom: parent.bottom
118 | anchors.right: parent.right
119 | anchors.margins: 10
120 | color: "#12AADF"
121 | border.width: 1
122 | border.color: "grey"
123 | visible: yz.modelCount>=0
124 | MouseArea{
125 | id:ma
126 | anchors.fill: parent
127 | hoverEnabled: true
128 | onEntered: {
129 | refreshBtn.color = "#12aacc";
130 | }
131 | onExited: {
132 | refreshBtn.color = "#12AADF";
133 | }
134 | onClicked: {
135 | getbetweenData();
136 | }
137 | }
138 |
139 | Text {
140 | text: "查询订单"
141 | anchors.fill: parent
142 | horizontalAlignment: Text.AlignHCenter
143 | verticalAlignment: Text.AlignVCenter
144 | color: "white"
145 | font.family: YSTHEME.textfontfamily
146 | font.pixelSize: YSTHEME.textFontSize
147 | }
148 | }
149 |
150 | function getbetweenData(){
151 | var dateArr = anmitionsId.getDatas();
152 | console.log("-----------------"+dateArr[0]);
153 | yz.searchTrades(dateArr[0],dateArr[1]);
154 | }
155 | }
156 |
--------------------------------------------------------------------------------
/youzan/YouZanWindow.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Window 2.2
3 | import QtQuick.Controls 1.1
4 | import "./youzan.js" as YouzanFunction
5 |
6 | Window {
7 | id:dateView
8 | width: 300
9 | height: 400
10 | visible: true
11 | flags: Qt.FramelessWindowHint
12 | modality: Qt.ApplicationModal
13 | color: "transparent"
14 | Rectangle{
15 | anchors.fill: parent
16 | border.color: "#CDCDCD"
17 | border.width: 1
18 | radius: 5
19 | DDCloseButton{
20 | id:closeCal
21 | width: 30
22 | height: width
23 | anchors.top: parent.top
24 | anchors.right: parent.right
25 | z:20
26 | onSignalCloseApp: {
27 | dateView.visible = false;
28 | }
29 | }
30 | YZCalView{
31 | id:calView
32 | width: parent.width
33 | height: parent.height*3/5-10
34 | }
35 | Column{
36 | anchors.bottom: parent.bottom
37 | width: parent.width-10
38 | anchors.horizontalCenter: parent.horizontalCenter
39 | height: parent.height*2/5
40 | spacing: 10
41 | YouzanTextTime{
42 | id:timeEdit
43 | width: parent.width-10
44 | }
45 | YouzanSlider {
46 | txt:"时钟"
47 | width: parent.width-10
48 | onSignalSliderValueChanged: {
49 | timeEdit.updateHH(valueId)
50 | }
51 | }
52 | YouzanSlider {
53 | txt: "分钟"
54 | width: parent.width-10
55 | maxValue: 59
56 | minValue: 0
57 | onSignalSliderValueChanged: {
58 | timeEdit.updateMM(valueId)
59 | }
60 | }
61 | YouzanSlider {
62 | txt: "秒钟"
63 | width: parent.width-10
64 | maxValue: 59
65 | minValue: 0
66 | onSignalSliderValueChanged: {
67 | timeEdit.updateSS(valueId);
68 | }
69 | }
70 | YouzanBottomGroup{
71 | id:btnGroup
72 | width: parent.width-10
73 | onSignalClickBtn: {
74 | if(itype==0){
75 | calView.setStartTimeCal(new Date);
76 | }else{
77 | dateView.visible = false;
78 | var time = timeEdit.getHMS();
79 | var date = calView.selectedDate;
80 | if(whichDateEdit==0){
81 | anmitionsId.setLefDateTimeString(YouzanFunction.getNowFormatDateLine(date,time));
82 | }else{
83 | anmitionsId.setRightDateTimeString(YouzanFunction.getNowFormatDateLine(date,time));
84 | }
85 | console.log("get date format "+YouzanFunction.getNowFormatDateLine(date,time)+" time "+time);
86 | }
87 | }
88 | }
89 | }
90 | }
91 | function setCalDate(date){
92 | calView.setStartTimeCal(date);
93 | }
94 | }
95 |
96 |
--------------------------------------------------------------------------------
/youzan/YouzanApi.pro:
--------------------------------------------------------------------------------
1 | TEMPLATE = app
2 |
3 | QT += qml quick widgets network
4 | qtHaveModule(printsupport): QT += printsupport
5 | SOURCES += main.cpp \
6 | youzanapi.cpp \
7 | youzanobject.cpp
8 |
9 | RESOURCES += qml.qrc
10 |
11 | # Additional import path used to resolve QML modules in Qt Creator's code model
12 | QML_IMPORT_PATH =
13 |
14 | # Default rules for deployment.
15 | include(deployment.pri)
16 |
17 |
18 | HEADERS += \
19 | youzanapi.h \
20 | youzanobject.h
21 |
--------------------------------------------------------------------------------
/youzan/YouzanBottomGroup.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls.Styles 1.2
3 | import QtQuick.Controls 1.2
4 | import "./youzan.js" as YSTHEME
5 |
6 | Item {
7 | width: 100
8 | height: 30
9 | signal signalClickBtn(int itype);
10 |
11 | Button {
12 | anchors.left: parent.left
13 | width:100
14 | style: ButtonStyle {
15 | background: Rectangle {
16 | implicitWidth: 100
17 | implicitHeight: 25
18 | color: "#12AADF"
19 | }
20 | label:Label {
21 | text: "设置当前时间"
22 | font.pixelSize: YSTHEME.textFontSize
23 | font.family: YSTHEME.textfontfamily
24 | horizontalAlignment: Text.AlignHCenter
25 | verticalAlignment: Text.AlignVCenter
26 | color: YSTHEME.textWhiteColor
27 | }
28 | }
29 | onClicked: {
30 | signalClickBtn(0);
31 | }
32 | }
33 | Button {
34 | anchors.right: parent.right
35 | width:80
36 | style: ButtonStyle {
37 | background: Rectangle {
38 | implicitWidth: 100
39 | implicitHeight: 25
40 | color: "#12AADF"
41 | }
42 | label:Label {
43 | text: "确 定"
44 | font.pixelSize: YSTHEME.textFontSize+2
45 | font.family: YSTHEME.textfontfamily
46 | horizontalAlignment: Text.AlignHCenter
47 | verticalAlignment: Text.AlignVCenter
48 | color: YSTHEME.textWhiteColor
49 | }
50 | }
51 | onClicked: {
52 | signalClickBtn(1);
53 | }
54 | }
55 | }
56 |
57 |
--------------------------------------------------------------------------------
/youzan/YouzanItem.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.2
4 | import QtGraphicalEffects 1.0
5 | //import duoduo.encode.components 1.0
6 |
7 | import "./youzan.js" as YSTHEME
8 |
9 | Item{
10 | property string zanTitle: "QtQuick网站-www.heilqt.com"
11 | property string zanId: "ZB2129102102910290"
12 | property string zanProductName: "康师傅冰红茶 100ml"
13 | property string zanCount: "1"
14 | property string zanPrice: "10.0 "
15 | property string zanFee: "10.0"
16 | property string zanCreateTime: "2016年5月13日下午13:30"
17 | property string zantrade: "微信支付"
18 | property string zanAddress: "上海黄浦区黄河路21-43号 鸿祥大厦17层"
19 | property string zanUserName: "赵飞燕"
20 | property string zanPhoneNum:"010-65155271"
21 | property string zanImg: "qrc:/images/128.png"
22 |
23 | signal signalClicked();
24 | signal signalOpenprinf();
25 |
26 | Rectangle {
27 | id: background
28 | anchors.fill: parent
29 | color: "white"
30 | }
31 | RectangularGlow {
32 | id: effect
33 | anchors.fill: rect
34 | glowRadius: 4
35 | spread: 0.2
36 | color: "black"
37 | cornerRadius: rect.radius + glowRadius
38 | }
39 | Rectangle {
40 | id:rect
41 | width: parent.width-140
42 | height: parent.height-20
43 | border.width: 0
44 | border.color: "grey"
45 | anchors.centerIn: parent
46 | radius: 2
47 | Rectangle{
48 | id: tid
49 | width: parent.width-2
50 | height: 30
51 | anchors.top: parent.top
52 | anchors.topMargin: 1
53 | anchors.horizontalCenter: parent.horizontalCenter
54 | color: "#A0DDF2"
55 | Text {
56 | text: zanTitle
57 | anchors.fill: parent
58 | horizontalAlignment: Text.AlignHCenter
59 | verticalAlignment: Text.AlignVCenter
60 | color: "white"
61 | font.family: YSTHEME.textfontfamily
62 | }
63 | }
64 | Rectangle{
65 | id:midRect
66 | width: parent.width-2
67 | height: parent.height-140
68 | anchors.top: tid.bottom
69 | anchors.horizontalCenter: parent.horizontalCenter
70 | anchors.bottom: name3.top
71 | border.color: "white"
72 | TextEdit {
73 | id: name2
74 | anchors.fill: parent
75 | anchors.margins: 10
76 | readOnly: true
77 | clip:true
78 | textFormat: TextEdit.RichText
79 | font.family: YSTHEME.textfontfamily
80 | font.pixelSize: Qt.platform.os=="windows"?YSTHEME.textFontSize:YSTHEME.textFontSize-2
81 | text: "*订单号: "+zanId+" No: "+(index+1)+"
*商品名: "+zanProductName
82 | +"
*数量: "+zanCount+"
*单价: "+zanPrice+"元
*应付: "+zanFee
83 | +"元
*订单创建时间: "+zanCreateTime+"
*付款类型: "+zantrade
84 | +"
*联系人: "+zanUserName+"
*收货地址: "+zanAddress+"
*联系号码: "+zanPhoneNum
85 | }
86 | }
87 | // QREnCode {
88 | // id: imgUrl
89 | // width: 96
90 | // height: width
91 | // anchors.bottom: dianxiaoEr.top
92 | // anchors.bottomMargin: -4
93 | // anchors.horizontalCenter: parent.horizontalCenter
94 | // smooth: true
95 | // qrSize: Qt.size(width,width)
96 | // qrData:zanTitle+index //encode contents
97 | // qrForeground: "#29aee1" //encode color
98 | // qrBackground: "white"
99 | // qrMargin: 2
100 | // qrMode: QREnCode.MODE_8 //encode model
101 | // qrLevel: QREnCode.LEVEL_Q // encode level
102 | // qrLogo: zanImg //or local path or qrc path but not network url
103 | // onQrSaveFileChanged: {
104 | // console.log("We get save file path is :"+qrfilepath)
105 | // }
106 | // }
107 | Text {
108 | id:dianxiaoEr
109 | text: "--校园小二 感谢您的光临--"
110 | width: parent.width-2
111 | height: 20
112 | anchors.bottom: name3.top
113 | font.family: YSTHEME.textfontfamily
114 | anchors.bottomMargin: 2
115 | anchors.horizontalCenter: parent.horizontalCenter
116 | horizontalAlignment: Text.AlignHCenter
117 | verticalAlignment: Text.AlignVCenter
118 | color: "black"
119 | }
120 |
121 | Button {
122 | id: name3
123 | width: 100
124 | height: 25
125 | style: ButtonStyle {
126 | background: Rectangle {
127 | implicitWidth: 100
128 | implicitHeight: 25
129 | border.width: control.activeFocus ? 2 : 1
130 | border.color: "#888"
131 | radius: 0
132 | color: YSTHEME.btn_color
133 | Text {
134 | id: prinfTxt
135 | text: "打 印"
136 | anchors.fill: parent
137 | color: "white"
138 | font.pixelSize: 14
139 | font.family: YSTHEME.textfontfamily
140 | anchors.horizontalCenter: parent.horizontalCenter
141 | horizontalAlignment: Text.AlignHCenter
142 | verticalAlignment: Text.AlignVCenter
143 | }
144 | }
145 | }
146 | anchors.bottom: parent.bottom
147 | anchors.bottomMargin: 1
148 | anchors.horizontalCenter: parent.horizontalCenter
149 | onClicked: {
150 | signalClicked();
151 | //saveItemToImage(zanId+".png");
152 | }
153 | }
154 | }
155 |
156 | function gethtmlcontents(){
157 | //console.log("text is "+name2.text)
158 | return name2.text;
159 | }
160 |
161 | function showorhide(show){
162 | name3.visible = show;
163 | }
164 | function saveItemToImage(filename){
165 | showorhide(false);
166 | rect.grabToImage(function(result) {
167 | result.saveToFile(filename);
168 | signalOpenprinf();
169 | showorhide(true);
170 | });
171 | return filename;
172 | }
173 | }
174 |
175 |
--------------------------------------------------------------------------------
/youzan/YouzanSlider.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import QtQuick.Controls 1.2
3 | import QtQuick.Controls.Styles 1.1
4 |
5 | import "./youzan.js" as YSTHEME
6 | Item {
7 | width: 100
8 | height: 20
9 | property string txt: "小时"
10 | property int maxValue: 23
11 | property int minValue: 0
12 |
13 | signal signalSliderValueChanged(string valueId);
14 |
15 | Text {
16 | id: txtId
17 | text: txt
18 | height: parent.height
19 | width: parent.width/9
20 | color: YSTHEME.textBlackColor
21 | font.family: YSTHEME.textfontfamily
22 | }
23 | Slider {
24 | id:sliderId
25 | anchors.left: txtId.right
26 | anchors.leftMargin: 2
27 | value: 0.0
28 | height: parent.height
29 | width: parent.width*8/9
30 | maximumValue: maxValue
31 | minimumValue: minValue
32 | style: SliderStyle{
33 | groove: Rectangle {
34 | implicitWidth: 200
35 | implicitHeight: 8
36 | color: YSTHEME.btn_color
37 | radius: 8
38 | }
39 | handle: Rectangle {
40 | anchors.centerIn: parent
41 | color: control.pressed ? "white" : "lightgray"
42 | border.color: "gray"
43 | border.width: 1
44 | implicitWidth: 20
45 | implicitHeight: 20
46 | x: control.leftPadding + (horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
47 | y: control.topPadding + (horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
48 | radius: implicitHeight/2
49 | readonly property bool horizontal: control.orientation === Qt.Horizontal
50 | }
51 | // handle: Rectangle {
52 | // x: control.leftPadding + (horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
53 | // y: control.topPadding + (horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
54 | // implicitWidth: 30
55 | // implicitHeight: 30
56 | // radius: width / 2
57 | // border.color: "#353637"
58 | // color: control.pressed ? "#bdbebf" : "#f6f6f6"
59 | // readonly property bool horizontal: control.orientation === Qt.Horizontal
60 | // }
61 | // tickmarks: Rectangle {
62 | // x: control.leftPadding + (horizontal ? 0 : (control.availableWidth - width) / 2)
63 | // y: control.topPadding + (horizontal ? (control.availableHeight - height) / 2 : 0)
64 | // implicitWidth: horizontal ? 200 : 6
65 | // implicitHeight: horizontal ? 6 : 200
66 | // width: horizontal ? control.availableWidth : implicitWidth
67 | // height: horizontal ? implicitHeight : control.availableHeight
68 | // radius: 3
69 | // border.color: "#353637"
70 | // color: "#ffffff"
71 | // scale: horizontal && control.mirrored ? -1 : 1
72 | // readonly property bool horizontal: control.orientation === Qt.Horizontal
73 | // }
74 | }
75 | onValueChanged: {
76 | signalSliderValueChanged(value.toFixed(0));
77 | }
78 | }
79 | }
80 |
81 |
--------------------------------------------------------------------------------
/youzan/YouzanTextTime.qml:
--------------------------------------------------------------------------------
1 | import QtQuick 2.0
2 | import "./youzan.js" as YSTHEME
3 |
4 | Item {
5 | width: 100
6 | height: 20
7 | property string txt: "时间: "
8 | property string h: "00"
9 | property string m: "00"
10 | property string s: "00"
11 |
12 | Row{
13 | anchors.fill: parent
14 | spacing: 8
15 | Text {
16 | id: txtId
17 | text: txt
18 | height: parent.height
19 | width: parent.width/9
20 | font.family: YSTHEME.textfontfamily
21 | color: YSTHEME.textBlackColor
22 | }
23 | Text {
24 | id: timeTxtId
25 | text: h+":"+m+":"+s
26 | height: parent.height
27 | width: parent.width/9
28 | font.family: YSTHEME.textfontfamily
29 | color:YSTHEME.textBlackColor
30 | }
31 | }
32 | function updateHH(hh){
33 | if(hh <=9){
34 | hh = "0"+hh;
35 | }
36 |
37 | h = hh;
38 | }
39 | function updateMM(mm){
40 | if(mm <=9){
41 | mm = "0"+mm;
42 | }
43 | m = mm
44 | }
45 | function updateSS(secondes){
46 | if(secondes <=9){
47 | secondes = "0"+secondes;
48 | }
49 | s= secondes;
50 | }
51 | function getHMS(){
52 | return timeTxtId.text
53 | }
54 | }
55 |
56 |
--------------------------------------------------------------------------------
/youzan/deployment.pri:
--------------------------------------------------------------------------------
1 | android-no-sdk {
2 | target.path = /data/user/qt
3 | export(target.path)
4 | INSTALLS += target
5 | } else:android {
6 | x86 {
7 | target.path = /libs/x86
8 | } else: armeabi-v7a {
9 | target.path = /libs/armeabi-v7a
10 | } else {
11 | target.path = /libs/armeabi
12 | }
13 | export(target.path)
14 | INSTALLS += target
15 | } else:unix {
16 | isEmpty(target.path) {
17 | qnx {
18 | target.path = /tmp/$${TARGET}/bin
19 | } else {
20 | target.path = /opt/$${TARGET}/bin
21 | }
22 | export(target.path)
23 | }
24 | INSTALLS += target
25 | }
26 |
27 | export(INSTALLS)
28 |
--------------------------------------------------------------------------------
/youzan/main.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include "youzanapi.h"
6 | #include "youzanobject.h"
7 |
8 | int main(int argc, char *argv[])
9 | {
10 | QApplication app(argc, argv);
11 |
12 | QQmlApplicationEngine engine;
13 | YouZanObject yZObj;
14 | engine.rootContext()->setContextProperty("yzObj", &yZObj);
15 | engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
16 | // YouZanApi api;
17 | // api.initData("2016-03-09 00:00:00","2016-05-09 00:00:00");
18 | return app.exec();
19 | }
20 |
--------------------------------------------------------------------------------
/youzan/qml.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | YouZanApi.qml
4 | YouzanItem.qml
5 | YouZanView.qml
6 | DDAbstractView.qml
7 | DDCloseButton.qml
8 | DDuiShadowBg.qml
9 | YouZanAnimation.qml
10 | YZCalView.qml
11 | youzan.js
12 | YouZanWindow.qml
13 | YouzanSlider.qml
14 | YouzanTextTime.qml
15 | YouzanBottomGroup.qml
16 | YouZanMain.qml
17 |
18 |
19 |
--------------------------------------------------------------------------------
/youzan/youzan.js:
--------------------------------------------------------------------------------
1 | var textWhiteColor = "white"
2 | var textBlackColor = "black"
3 | var textRedColor = "red"
4 | var textfontfamily = "微软雅黑"
5 | var textFontSize = 14;
6 | var active_color = "#008720"
7 | var btn_color ="#12AADF"
8 |
9 | function getNowFormatDateLine(zanDate,zanTime) {
10 | var date = zanDate;
11 | var seperator1 = "-";
12 | var seperator2 = ":";
13 | var month = date.getMonth() + 1;
14 | var strDate = date.getDate();
15 | if (month >= 1 && month <= 9) {
16 | month = "0" + month;
17 | }
18 | if (strDate >= 0 && strDate <= 9) {
19 | strDate = "0" + strDate;
20 | }
21 | var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate+" "+zanTime;
22 | return currentdate;
23 | }
24 |
--------------------------------------------------------------------------------
/youzan/youzan.jsc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/toby20130333/QtQuickExample/daf60ce73750fa37548e67c9812baa0a7f2384ba/youzan/youzan.jsc
--------------------------------------------------------------------------------
/youzan/youzanapi.cpp:
--------------------------------------------------------------------------------
1 | /*********************************************************************************
2 | *Copyright(C),2014-2016,www.heilqt.com
3 | *FileName(文件名): youzanapi
4 | *Author (作者): TobyYi(https://github.com/toby20130333)
5 | *Version (版本): 1.0.0
6 | *CreateDate(创建日期):
7 | *FinishDate(完成日期):
8 | *Description(描述):
9 | 1.用于主要说明此程序文件完成的主要功能
10 | 2.与其他模块或函数的接口、输出值、取值范围、含义及参数间的控制、顺序、独立及依赖关系
11 |
12 | *Others(其他内容说明):
13 | others
14 | *Function List(函数列表):
15 | 1.主要函数列表,每条记录应包含函数名及功能简要说明
16 |
17 | 2.
18 | *History(历史修订记录):
19 | 1.Date: 修改日期
20 | Author:修改者
21 | Modification:修改内容简介
22 |
23 | 2.
24 |
25 | **********************************************************************************/
26 | #include "youzanapi.h"
27 |
28 | YouZanApi::YouZanApi(QObject *parent) : QObject(parent)
29 | {
30 | manager = new QNetworkAccessManager(this);
31 | }
32 |
33 | void YouZanApi::initData(QString starttime,QString endTime)
34 | {
35 | QString startCreated =starttime;
36 | QString endCreadted = endTime;
37 | QString secret="secret";
38 | QString appid="appid";
39 |
40 | QDateTime currentDate=QDateTime::currentDateTime();
41 | QString method="kdt.trades.sold.get";//调用第三方接口函数
42 |
43 | QString dateString=currentDate.toString("yyyy-MM-dd hh:mm:ss");
44 |
45 | // //md5验证码
46 |
47 | QString md5=Qtmd5(secret+"app_id"+appid+"end_created"+endCreadted+"formatjson"+"method"
48 | +method+"sign_methodmd5"+"start_created"+startCreated+"timestamp"+dateString+"v1.0"+secret
49 | );
50 |
51 | QString url ="https://open.koudaitong.com/api/entry?sign="+md5+"&"+"timestamp="+
52 | dateString+"&v=1.0&app_id="+appid+"&method="+
53 | method+"&sign_method=md5&format=json"+
54 | "&start_created="+startCreated+
55 | "&end_created="+endCreadted;
56 | qDebug()<<"------------"<get(request);
64 | connect(manager, SIGNAL(finished(QNetworkReply*)),
65 | this, SLOT(replyFinished(QNetworkReply*)));
66 | connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
67 | this, SLOT(slotError(QNetworkReply::NetworkError)));
68 | connect(reply, SIGNAL(sslErrors(QList)),
69 | this, SLOT(slotSslErrors(QList)));
70 |
71 | }
72 |
73 | QString YouZanApi::Qtmd5(QString code)
74 | {
75 | QString pwd=code;
76 | QString md5;
77 | QByteArray ba,bb;
78 | QCryptographicHash md(QCryptographicHash::Md5);
79 | ba.append(pwd);
80 | md.addData(ba);
81 | bb = md.result();
82 | md5.append(bb.toHex());
83 | return md5;
84 | }
85 |
86 | void YouZanApi::replyFinished(QNetworkReply *reply)
87 | {
88 | qDebug()<errorString();
89 | }
90 | void YouZanApi::slotError(QNetworkReply::NetworkError)
91 | {
92 |
93 | }
94 |
95 | void YouZanApi::slotSslErrors(QList)
96 | {
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/youzan/youzanapi.h:
--------------------------------------------------------------------------------
1 | #ifndef YOUZANAPI_H
2 | #define YOUZANAPI_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | class YouZanApi : public QObject
11 | {
12 | Q_OBJECT
13 | public:
14 | explicit YouZanApi(QObject *parent = 0);
15 |
16 | void initData(QString starttime, QString endTime);
17 |
18 | void requestData();
19 | QString Qtmd5(QString code);
20 | signals:
21 |
22 | public slots:
23 | void replyFinished(QNetworkReply*);
24 | void slotError(QNetworkReply::NetworkError);
25 | void slotSslErrors(QList);
26 | private:
27 | QNetworkAccessManager *manager;
28 | };
29 |
30 | #endif // YOUZANAPI_H
31 |
--------------------------------------------------------------------------------
/youzan/youzanobject.cpp:
--------------------------------------------------------------------------------
1 | /*********************************************************************************
2 | *Copyright(C),2014-2016,www.heilqt.com
3 | *FileName(文件名): youzanapi
4 | *Author (作者): TobyYi(https://github.com/toby20130333)
5 | *Version (版本): 1.0.0
6 | *CreateDate(创建日期):
7 | *FinishDate(完成日期):
8 | *Description(描述):
9 | 1.用于主要说明此程序文件完成的主要功能
10 | 2.与其他模块或函数的接口、输出值、取值范围、含义及参数间的控制、顺序、独立及依赖关系
11 |
12 | *Others(其他内容说明):
13 | others
14 | *Function List(函数列表):
15 | 1.主要函数列表,每条记录应包含函数名及功能简要说明
16 |
17 | 2.
18 | *History(历史修订记录):
19 | 1.Date: 修改日期
20 | Author:修改者
21 | Modification:修改内容简介
22 |
23 | 2.
24 |
25 | **********************************************************************************/
26 | #include "youzanobject.h"
27 | #include
28 | #include
29 | #include
30 |
31 | YouZanObject::YouZanObject(QObject *parent) : QObject(parent)
32 | {
33 | mUseImg=true;
34 | }
35 |
36 | int YouZanObject::getCurrentPage() const {
37 | return mCurrentPage;
38 | }
39 |
40 | void YouZanObject::slotSetcurrentPage(int curpage)
41 | {
42 | if(curpage == -1)return;
43 | mCurrentPage = curpage;
44 | }
45 |
46 | void YouZanObject::slotSetUseImagePrinf(bool use)
47 | {
48 | if(mUseImg != use)
49 | mUseImg = use;
50 | qDebug()<<"-------prinfImage----------"<
5 | #include
6 | #include
7 |
8 | class YouZanObject : public QObject
9 | {
10 | Q_OBJECT
11 | public:
12 | explicit YouZanObject(QObject *parent = 0);
13 |
14 | Q_INVOKABLE int getCurrentPage() const;
15 | void doPrint();
16 | signals:
17 | void signalPrintFinished();
18 | public slots:
19 | void slotSetcurrentPage(int curpage);
20 | void slotSetUseImagePrinf(bool use=true);
21 | void openPrinfDialog(bool isOpen = true);
22 | void printString(const QString &htmlString);
23 | void prinfImage(const QString& imgpath);
24 | void setCurrentPrintContents(const QString& html);
25 | void setCurrentPrintImage(const QString& html);
26 |
27 | private:
28 | int mCurrentPage;
29 | QStringList mHtmlList;
30 | QStringList mImageList;
31 | bool mUseImg;
32 | };
33 |
34 | #endif // YOUZANOBJECT_H
35 |
--------------------------------------------------------------------------------
/youzan/youzhan.json:
--------------------------------------------------------------------------------
1 | {
2 | "response": {
3 | "total_results": 33,
4 | "trades": [{
5 | "tid": "E231958349",
6 | "num": 1,
7 | "num_iid": 3424234,
8 | "price": 200.07,
9 | "pic_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg",
10 | "pic_thumb_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg!200x0.jpg",
11 | "title": "\u6625\u5b63\u65b0\u6b3e\u8fde\u8863\u88d9",
12 | "type": "FIXED",
13 | "weixin_user_id": 18,
14 | "buyer_type": 1,
15 | "buyer_id": 18,
16 | "buyer_nick": "MyGirl",
17 | "buyer_message": "",
18 | "seller_flag": "5",
19 | "trade_memo": "\u8fd9\u662f\u4e00\u6b21\u6210\u529f\u7684\u4ea4\u6613",
20 | "receiver_city": "\u676d\u5dde\u5e02",
21 | "receiver_district": "\u897f\u6e56\u533a",
22 | "receiver_name": "\u4e1c\u65b9\u8d25\u5bb6",
23 | "receiver_state": "\u6d59\u6c5f\u7701",
24 | "receiver_address": "\u534e\u590f\u8def#12",
25 | "receiver_zip": "223700",
26 | "receiver_mobile": "13512501826",
27 | "feedback": "0",
28 | "refund_state": "NO_REFUND",
29 | "outer_tid": "X231958349",
30 | "status": "TRADE_NO_CREATE_PAY",
31 | "shipping_type": "express",
32 | "post_fee": 2.01,
33 | "total_fee": 200.02,
34 | "refunded_fee": 0,
35 | "discount_fee": 0,
36 | "payment": 202.03,
37 | "created": "2000-01-01 00:00:00",
38 | "update_time": "2000-01-01 00:00:00",
39 | "pay_time": "2000-01-01 00:00:00",
40 | "pay_type": "ALIPAY",
41 | "consign_time": "2000-01-01 00:00:00",
42 | "sign_time": "2000-01-02 12:00:00",
43 | "buyer_area": "\u6d59\u6c5f\u7701\u676d\u5dde\u5e02",
44 | "orders": [{
45 | "oid": 14776,
46 | "num_iid": 3424234,
47 | "sku_id": 32221,
48 | "sku_unique_code": "342423432221",
49 | "num": 2,
50 | "outer_sku_id": "81893848",
51 | "outer_item_id": "G1893848",
52 | "title": "\u5c71\u5be8\u7248\u6d4b\u8bd5\u673a\u5668",
53 | "seller_nick": "\u9ea6\u5305\u5305",
54 | "fenxiao_price": 220.02,
55 | "fenxiao_payment": 220.02,
56 | "price": 200.02,
57 | "total_fee": 200.02,
58 | "discount_fee": 0,
59 | "payment": 200.02,
60 | "sku_properties_name": "\u989c\u8272:\u6854\u8272;\u5c3a\u7801:M",
61 | "pic_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg",
62 | "pic_thumb_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg!200x0.jpg",
63 | "item_type": "0",
64 | "buyer_messages": [{
65 | "title": "\u989c\u8272\u8981\u6c42",
66 | "content": "\u7ea2\u8272\u7684\u6216\u8005\u9ec4\u8272\u7684"
67 | },
68 | {
69 | "title": "\u989c\u8272\u8981\u6c42",
70 | "content": "\u7ea2\u8272\u7684\u6216\u8005\u9ec4\u8272\u7684"
71 | }],
72 | "order_promotion_details": [{
73 | "promotion_name": "\u626b\u7801\u6298\u6263",
74 | "promotion_type": "CUSTOMER_DISCOUNT",
75 | "apply_at": "2014-09-30 12:23:00",
76 | "discount_fee": "10.00"
77 | },
78 | {
79 | "promotion_name": "\u626b\u7801\u6298\u6263",
80 | "promotion_type": "CUSTOMER_DISCOUNT",
81 | "apply_at": "2014-09-30 12:23:00",
82 | "discount_fee": "10.00"
83 | }],
84 | "state_str": "\u5df2\u53d1\u8d27,\u5f85\u53d1\u8d27,\u9000\u6b3e\u4e2d,\u9000\u6b3e\u5173\u95ed,\u9000\u6b3e\u6210\u529f",
85 | "item_refund_state": "NO_REFUND(\u65e0\u9000\u6b3e),PARTIAL_REFUND(\u90e8\u5206\u9000\u6b3e),FULL_REFUND(\u5168\u989d\u9000\u6b3e) \u003C\/br\u003E \u53ea\u6709\u5f53\u8ba2\u5355\u662f\u90e8\u5206\u9000\u6b3e, \u624d\u4f1a\u751f\u6210item_refund_state"
86 | },
87 | {
88 | "oid": 14776,
89 | "num_iid": 3424234,
90 | "sku_id": 32221,
91 | "sku_unique_code": "342423432221",
92 | "num": 2,
93 | "outer_sku_id": "81893848",
94 | "outer_item_id": "G1893848",
95 | "title": "\u5c71\u5be8\u7248\u6d4b\u8bd5\u673a\u5668",
96 | "seller_nick": "\u9ea6\u5305\u5305",
97 | "fenxiao_price": 220.02,
98 | "fenxiao_payment": 220.02,
99 | "price": 200.02,
100 | "total_fee": 200.02,
101 | "discount_fee": 0,
102 | "payment": 200.02,
103 | "sku_properties_name": "\u989c\u8272:\u6854\u8272;\u5c3a\u7801:M",
104 | "pic_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg",
105 | "pic_thumb_path": "http:\/\/imgqn.koudaitong.com\/upload_files\/2014\/01\/13\/138961372114213030.jpg!200x0.jpg",
106 | "item_type": "0",
107 | "buyer_messages": [{
108 | "title": "\u989c\u8272\u8981\u6c42",
109 | "content": "\u7ea2\u8272\u7684\u6216\u8005\u9ec4\u8272\u7684"
110 | },
111 | {
112 | "title": "\u989c\u8272\u8981\u6c42",
113 | "content": "\u7ea2\u8272\u7684\u6216\u8005\u9ec4\u8272\u7684"
114 | }],
115 | "order_promotion_details": [{
116 | "promotion_name": "\u626b\u7801\u6298\u6263",
117 | "promotion_type": "CUSTOMER_DISCOUNT",
118 | "apply_at": "2014-09-30 12:23:00",
119 | "discount_fee": "10.00"
120 | },
121 | {
122 | "promotion_name": "\u626b\u7801\u6298\u6263",
123 | "promotion_type": "CUSTOMER_DISCOUNT",
124 | "apply_at": "2014-09-30 12:23:00",
125 | "discount_fee": "10.00"
126 | }],
127 | "state_str": "\u5df2\u53d1\u8d27,\u5f85\u53d1\u8d27,\u9000\u6b3e\u4e2d,\u9000\u6b3e\u5173\u95ed,\u9000\u6b3e\u6210\u529f",
128 | "item_refund_state": "NO_REFUND(\u65e0\u9000\u6b3e),PARTIAL_REFUND(\u90e8\u5206\u9000\u6b3e),FULL_REFUND(\u5168\u989d\u9000\u6b3e) \u003C\/br\u003E \u53ea\u6709\u5f53\u8ba2\u5355\u662f\u90e8\u5206\u9000\u6b3e, \u624d\u4f1a\u751f\u6210item_refund_state"
129 | }],
130 | "fetch_detail": {
131 | "fetcher_name": "\u5c0f\u4e8c",
132 | "fetcher_mobile": "13512501826",
133 | "fetch_time": "2014-08-20 12:08:00",
134 | "shop_name": "\u676d\u5dde\u6b66\u6797\u95e8\u5e97",
135 | "shop_mobile": "13812501826",
136 | "shop_state": "\u6d59\u6c5f\u7701",
137 | "shop_city": "\u676d\u5dde\u5e02",
138 | "shop_district": "\u897f\u6e56\u533a",
139 | "shop_address": "\u73af\u57ce\u897f\u8def16\u53f7"
140 | },
141 | "coupon_details": [{
142 | "coupon_id": "80",
143 | "coupon_name": "\u56fd\u5e8610\u5143\u4f18\u60e0",
144 | "coupon_type": "PROMOCODE",
145 | "coupon_content": "R5YUXHHAJV",
146 | "coupon_description": "\u5168\u5e97\u90fd\u901a\u7528",
147 | "coupon_condition": "\u6ee150\u5143\u51cf10\u5143",
148 | "used_at": "2014-09-30 12:23:00",
149 | "discount_fee": "10.00"
150 | },
151 | {
152 | "coupon_id": "80",
153 | "coupon_name": "\u56fd\u5e8610\u5143\u4f18\u60e0",
154 | "coupon_type": "PROMOCODE",
155 | "coupon_content": "R5YUXHHAJV",
156 | "coupon_description": "\u5168\u5e97\u90fd\u901a\u7528",
157 | "coupon_condition": "\u6ee150\u5143\u51cf10\u5143",
158 | "used_at": "2014-09-30 12:23:00",
159 | "discount_fee": "10.00"
160 | }],
161 | "promotion_details": [{
162 | "promotion_id": "80",
163 | "promotion_name": "\u56fd\u5e8610\u5143\u4f18\u60e0",
164 | "promotion_type": "FULLREDUCE",
165 | "promotion_condition": "\u6ee150\u5143\u51cf10\u5143\uff1b\u6ee140\u5143\u51cf5\u5143",
166 | "used_at": "2014-09-30 12:23:00",
167 | "discount_fee": "10.00"
168 | },
169 | {
170 | "promotion_id": "80",
171 | "promotion_name": "\u56fd\u5e8610\u5143\u4f18\u60e0",
172 | "promotion_type": "FULLREDUCE",
173 | "promotion_condition": "\u6ee150\u5143\u51cf10\u5143\uff1b\u6ee140\u5143\u51cf5\u5143",
174 | "used_at": "2014-09-30 12:23:00",
175 | "discount_fee": "10.00"
176 | }],
177 | "adjust_fee": 10.02,
178 | "sub_trades": "",
179 | "relation_type": "",
180 | "relations": "",
181 | "profit": 5.2,
182 | "handled": 1
183 | }],
184 | "has_next": true
185 | }
186 | }
--------------------------------------------------------------------------------