├── 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 | ![数字雨](images/matrix.png) 3 | ![驱动精灵主界面](http://qiniu.heilqt.com/qtquickdriver.png) 4 | ![迅雷在线皮肤设置](http://qiniu.heilqt.com/qtquickxl.png) 5 | ![迅雷本地皮肤设置](http://qiniu.heilqt.com/qtquicklocal.png) 6 | ![有赞商城商品UI](http://qiniu.heilqt.com/youzan-new.png) 7 | ![360安全卫士](http://qiniu.heilqt.com/360.png) 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 | } --------------------------------------------------------------------------------