mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2024-11-27 05:38:37 +08:00
update
This commit is contained in:
parent
73518fb831
commit
991ea383e7
@ -134,7 +134,9 @@ FluExpander{
|
|||||||
"FluHttp",
|
"FluHttp",
|
||||||
"FluWatermark",
|
"FluWatermark",
|
||||||
"FluTour",
|
"FluTour",
|
||||||
"FluQRCode"
|
"FluQRCode",
|
||||||
|
"FluTimeline",
|
||||||
|
"FluChart"
|
||||||
];
|
];
|
||||||
code = code.replace(/\n/g, "<br>");
|
code = code.replace(/\n/g, "<br>");
|
||||||
code = code.replace(/ /g, " ");
|
code = code.replace(/ /g, " ");
|
||||||
|
@ -343,6 +343,18 @@ FluObject{
|
|||||||
navigationView.push("qrc:/example/qml/page/T_Tour.qml")
|
navigationView.push("qrc:/example/qml/page/T_Tour.qml")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"Timeline"
|
||||||
|
onTap:{
|
||||||
|
navigationView.push("qrc:/example/qml/page/T_Timeline.qml")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"Chart"
|
||||||
|
onTap:{
|
||||||
|
navigationView.push("qrc:/example/qml/page/T_Chart.qml")
|
||||||
|
}
|
||||||
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Http"
|
title:"Http"
|
||||||
onTap:{
|
onTap:{
|
||||||
|
332
example/qml/page/T_Chart.qml
Normal file
332
example/qml/page/T_Chart.qml
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import FluentUI
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"Timeline"
|
||||||
|
|
||||||
|
function randomScalingFactor() {
|
||||||
|
return Math.random().toFixed(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 370
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluChart{
|
||||||
|
anchors.fill: parent
|
||||||
|
chartType: 'scatter'
|
||||||
|
chartData: {
|
||||||
|
return {
|
||||||
|
datasets: [{
|
||||||
|
label: 'My First dataset',
|
||||||
|
xAxisID: 'x-axis-1',
|
||||||
|
yAxisID: 'y-axis-1',
|
||||||
|
borderColor: '#ff5555',
|
||||||
|
backgroundColor: 'rgba(255,192,192,0.3)',
|
||||||
|
data: [{
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
label: 'My Second dataset',
|
||||||
|
xAxisID: 'x-axis-1',
|
||||||
|
yAxisID: 'y-axis-2',
|
||||||
|
borderColor: '#5555ff',
|
||||||
|
backgroundColor: 'rgba(192,192,255,0.3)',
|
||||||
|
data: [{
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}, {
|
||||||
|
x: randomScalingFactor(),
|
||||||
|
y: randomScalingFactor(),
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}}
|
||||||
|
chartOptions: {return {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
hoverMode: 'nearest',
|
||||||
|
intersect: true,
|
||||||
|
title: {
|
||||||
|
display: true,
|
||||||
|
text: 'Chart.js Scatter Chart - Multi Axis'
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
position: 'bottom',
|
||||||
|
gridLines: {
|
||||||
|
zeroLineColor: 'rgba(0,0,0,1)'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
|
||||||
|
display: true,
|
||||||
|
position: 'left',
|
||||||
|
id: 'y-axis-1',
|
||||||
|
}, {
|
||||||
|
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
|
||||||
|
display: true,
|
||||||
|
position: 'right',
|
||||||
|
reverse: true,
|
||||||
|
id: 'y-axis-2',
|
||||||
|
|
||||||
|
// grid line settings
|
||||||
|
gridLines: {
|
||||||
|
drawOnChartArea: false, // only want the grid lines for one axis to show up
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 370
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluChart{
|
||||||
|
anchors.fill: parent
|
||||||
|
chartType: 'bar'
|
||||||
|
chartData: { return {
|
||||||
|
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
|
||||||
|
datasets: [{
|
||||||
|
label: 'Dataset 1',
|
||||||
|
backgroundColor: '#ff9999',
|
||||||
|
stack: 'Stack 0',
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
label: 'Dataset 2',
|
||||||
|
backgroundColor: '#9999ff',
|
||||||
|
stack: 'Stack 0',
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
label: 'Dataset 3',
|
||||||
|
backgroundColor: '#99ff99',
|
||||||
|
stack: 'Stack 1',
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chartOptions: { return {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
title: {
|
||||||
|
display: true,
|
||||||
|
text: 'Chart.js Bar Chart - Stacked'
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
mode: 'index',
|
||||||
|
intersect: false
|
||||||
|
},
|
||||||
|
responsive: true,
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
stacked: true,
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
stacked: true
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 370
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluChart{
|
||||||
|
anchors.fill: parent
|
||||||
|
chartType: 'pie'
|
||||||
|
chartData: {return {
|
||||||
|
datasets: [{
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
],
|
||||||
|
backgroundColor: [
|
||||||
|
'#ffbbbb',
|
||||||
|
'#ffddaa',
|
||||||
|
'#ffffbb',
|
||||||
|
'#bbffbb',
|
||||||
|
'#bbbbff'
|
||||||
|
],
|
||||||
|
label: 'Dataset 1'
|
||||||
|
}],
|
||||||
|
labels: [
|
||||||
|
'Red',
|
||||||
|
'Orange',
|
||||||
|
'Yellow',
|
||||||
|
'Green',
|
||||||
|
'Blue'
|
||||||
|
]
|
||||||
|
}}
|
||||||
|
chartOptions: {return {maintainAspectRatio: false, responsive: true}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 370
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluChart{
|
||||||
|
anchors.fill: parent
|
||||||
|
chartType: 'line'
|
||||||
|
chartData: { return {
|
||||||
|
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
|
||||||
|
datasets: [{
|
||||||
|
label: 'Filled',
|
||||||
|
fill: true,
|
||||||
|
backgroundColor: 'rgba(192,222,255,0.3)',
|
||||||
|
borderColor: 'rgba(128,192,255,255)',
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
],
|
||||||
|
}, {
|
||||||
|
label: 'Dashed',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: 'rgba(0,0,0,0)',
|
||||||
|
borderColor: '#009900',
|
||||||
|
borderDash: [5, 5],
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
],
|
||||||
|
}, {
|
||||||
|
label: 'Filled',
|
||||||
|
backgroundColor: 'rgba(0,0,0,0)',
|
||||||
|
borderColor: '#990000',
|
||||||
|
data: [
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor(),
|
||||||
|
randomScalingFactor()
|
||||||
|
],
|
||||||
|
fill: false,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chartOptions: {return {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
title: {
|
||||||
|
display: true,
|
||||||
|
text: 'Chart.js Line Chart'
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
mode: 'index',
|
||||||
|
intersect: false,
|
||||||
|
},
|
||||||
|
hover: {
|
||||||
|
mode: 'nearest',
|
||||||
|
intersect: true
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
display: true,
|
||||||
|
scaleLabel: {
|
||||||
|
display: true,
|
||||||
|
labelString: 'Month'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
display: true,
|
||||||
|
scaleLabel: {
|
||||||
|
display: true,
|
||||||
|
labelString: 'Value'
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
14
example/qml/page/T_Timeline.qml
Normal file
14
example/qml/page/T_Timeline.qml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import FluentUI
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"Timeline"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -36,7 +36,7 @@ foreach(filepath ${QML_PATHS})
|
|||||||
endforeach(filepath)
|
endforeach(filepath)
|
||||||
|
|
||||||
#遍历所有资源文件
|
#遍历所有资源文件
|
||||||
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp qmldir)
|
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.js qmldir)
|
||||||
foreach(filepath ${RES_PATHS})
|
foreach(filepath ${RES_PATHS})
|
||||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
||||||
list(APPEND resource_files ${filename})
|
list(APPEND resource_files ${filename})
|
||||||
|
122
src/imports/FluentUI/Controls/FluChart.qml
Normal file
122
src/imports/FluentUI/Controls/FluChart.qml
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
import QtQuick 2.13
|
||||||
|
import "./../JS/Chart.js" as Chart
|
||||||
|
|
||||||
|
Canvas {
|
||||||
|
id: control
|
||||||
|
|
||||||
|
property var jsChart: undefined
|
||||||
|
property string chartType
|
||||||
|
property var chartData
|
||||||
|
property var chartOptions
|
||||||
|
property double chartAnimationProgress: 0.1
|
||||||
|
property int animationEasingType: Easing.InOutExpo
|
||||||
|
property double animationDuration: 500
|
||||||
|
property var memorizedContext
|
||||||
|
property var memorizedData
|
||||||
|
property var memorizedOptions
|
||||||
|
property alias animationRunning: chartAnimator.running
|
||||||
|
signal animationFinished()
|
||||||
|
function animateToNewData()
|
||||||
|
{
|
||||||
|
chartAnimationProgress = 0.1;
|
||||||
|
jsChart.update();
|
||||||
|
chartAnimator.restart();
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
id: event
|
||||||
|
anchors.fill: control
|
||||||
|
hoverEnabled: true
|
||||||
|
enabled: true
|
||||||
|
property var handler: undefined
|
||||||
|
property QtObject mouseEvent: QtObject {
|
||||||
|
property int left: 0
|
||||||
|
property int top: 0
|
||||||
|
property int x: 0
|
||||||
|
property int y: 0
|
||||||
|
property int clientX: 0
|
||||||
|
property int clientY: 0
|
||||||
|
property string type: ""
|
||||||
|
property var target
|
||||||
|
}
|
||||||
|
function submitEvent(mouse, type) {
|
||||||
|
mouseEvent.type = type
|
||||||
|
mouseEvent.clientX = mouse ? mouse.x : 0;
|
||||||
|
mouseEvent.clientY = mouse ? mouse.y : 0;
|
||||||
|
mouseEvent.x = mouse ? mouse.x : 0;
|
||||||
|
mouseEvent.y = mouse ? mouse.y : 0;
|
||||||
|
mouseEvent.left = 0;
|
||||||
|
mouseEvent.top = 0;
|
||||||
|
mouseEvent.target = control;
|
||||||
|
|
||||||
|
if(handler) {
|
||||||
|
handler(mouseEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
control.requestPaint();
|
||||||
|
}
|
||||||
|
onClicked:(mouse)=> {
|
||||||
|
submitEvent(mouse, "click");
|
||||||
|
}
|
||||||
|
onPositionChanged:(mouse)=> {
|
||||||
|
submitEvent(mouse, "mousemove");
|
||||||
|
}
|
||||||
|
onExited: {
|
||||||
|
submitEvent(undefined, "mouseout");
|
||||||
|
}
|
||||||
|
onEntered: {
|
||||||
|
submitEvent(undefined, "mouseenter");
|
||||||
|
}
|
||||||
|
onPressed:(mouse)=> {
|
||||||
|
submitEvent(mouse, "mousedown");
|
||||||
|
}
|
||||||
|
onReleased:(mouse)=> {
|
||||||
|
submitEvent(mouse, "mouseup");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PropertyAnimation {
|
||||||
|
id: chartAnimator
|
||||||
|
target: control
|
||||||
|
property: "chartAnimationProgress"
|
||||||
|
alwaysRunToEnd: true
|
||||||
|
to: 1
|
||||||
|
duration: control.animationDuration
|
||||||
|
easing.type: control.animationEasingType
|
||||||
|
onFinished: {
|
||||||
|
control.animationFinished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onChartAnimationProgressChanged: {
|
||||||
|
control.requestPaint();
|
||||||
|
}
|
||||||
|
onPaint: {
|
||||||
|
if(control.getContext('2d') !== null && memorizedContext !== control.getContext('2d') || memorizedData !== control.chartData || memorizedOptions !== control.chartOptions) {
|
||||||
|
var ctx = control.getContext('2d');
|
||||||
|
|
||||||
|
jsChart = Chart.build(ctx, {
|
||||||
|
type: control.chartType,
|
||||||
|
data: control.chartData,
|
||||||
|
options: control.chartOptions
|
||||||
|
});
|
||||||
|
|
||||||
|
memorizedData = control.chartData ;
|
||||||
|
memorizedContext = control.getContext('2d');
|
||||||
|
memorizedOptions = control.chartOptions;
|
||||||
|
|
||||||
|
control.jsChart.bindEvents(function(newHandler) {event.handler = newHandler;});
|
||||||
|
|
||||||
|
chartAnimator.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
jsChart.draw(chartAnimationProgress);
|
||||||
|
}
|
||||||
|
onWidthChanged: {
|
||||||
|
if(jsChart) {
|
||||||
|
jsChart.resize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onHeightChanged: {
|
||||||
|
if(jsChart) {
|
||||||
|
jsChart.resize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
src/imports/FluentUI/Controls/FluTimeline.qml
Normal file
43
src/imports/FluentUI/Controls/FluTimeline.qml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import FluentUI
|
||||||
|
|
||||||
|
Item{
|
||||||
|
property var items: []
|
||||||
|
id:control
|
||||||
|
|
||||||
|
ListModel{
|
||||||
|
id:list_model
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
items = [
|
||||||
|
{
|
||||||
|
text: 'Create a services site 2015-09-01',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Solve initial network problems 2015-09-01',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Technical testing 2015-09-01',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Network problems being solved 2015-09-01',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
Column{
|
||||||
|
id:layout_column
|
||||||
|
Repeater{
|
||||||
|
|
||||||
|
model:list_model
|
||||||
|
FluText{
|
||||||
|
text: model.text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
20782
src/imports/FluentUI/JS/Chart.js
vendored
Normal file
20782
src/imports/FluentUI/JS/Chart.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -81,4 +81,6 @@ FluTooltip 1.0 Controls/FluTooltip.qml
|
|||||||
FluTour 1.0 Controls/FluTour.qml
|
FluTour 1.0 Controls/FluTour.qml
|
||||||
FluTreeView 1.0 Controls/FluTreeView.qml
|
FluTreeView 1.0 Controls/FluTreeView.qml
|
||||||
FluWindow 1.0 Controls/FluWindow.qml
|
FluWindow 1.0 Controls/FluWindow.qml
|
||||||
|
FluWindow 1.0 Controls/FluTimeline.qml
|
||||||
|
FluWindow 1.0 Controls/FluChart.qml
|
||||||
plugin fluentuiplugin
|
plugin fluentuiplugin
|
||||||
|
Loading…
Reference in New Issue
Block a user