Initial release
44
Clock.qml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Layouts 1.1
|
||||||
|
import QtQuick.Controls 1.1
|
||||||
|
import QtQuick.Window 2.0
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
// title: qsTr("Hello World")
|
||||||
|
width: 480
|
||||||
|
height: 200
|
||||||
|
color: "#000000"
|
||||||
|
property date currDate: new Date()
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 500; running: true; repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
currDate = new Date()
|
||||||
|
time.text = currDate.toTimeString()
|
||||||
|
datum.text = currDate.toDateString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: layout
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: time
|
||||||
|
// anchors.top: parent.top
|
||||||
|
font.pointSize: 48
|
||||||
|
font.family: "Helvetica"
|
||||||
|
color: "#ffffff"
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
id: datum
|
||||||
|
// anchors.bottom: parent.bottom
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
font.pointSize: 24
|
||||||
|
color: "#ffffff"
|
||||||
|
font.family: "Helvetica"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
QmlMirror.pro
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
|
SUBDIRS = weatherinfo
|
||||||
|
|
||||||
|
|
||||||
|
SOURCES = QmlMirror.qml \
|
||||||
|
Clock.qml \
|
||||||
|
Weather.qml
|
||||||
|
|
270
QmlMirror.pro.user
Normal file
|
@ -0,0 +1,270 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 3.4.0, 2015-05-22T22:12:58. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{33a03946-c0a5-4644-afa8-64c4fb2256c6}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.4.1 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.4.1 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.54.gcc_64_kit</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oan/Projects/private/QmlMirror/build-QmlMirror-Desktop_Qt_5_4_1_GCC_64bit-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oan/Projects/private/QmlMirror/build-QmlMirror-Desktop_Qt_5_4_1_GCC_64bit-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
||||||
|
<value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">18</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">18</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
262
QmlMirror.pro.user.3.2-pre1
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 3.1.2, 2015-05-14T12:04:08. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.3 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.3 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.53.gcc_64_kit</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oan/Projects/private/QmlMirror/build-QmlMirror-Desktop_Qt_5_3_GCC_64bit-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oan/Projects/private/QmlMirror/build-QmlMirror-Desktop_Qt_5_3_GCC_64bit-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||||
|
<value type="QString">-w</value>
|
||||||
|
<value type="QString">-r</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
||||||
|
<value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{33a03946-c0a5-4644-afa8-64c4fb2256c6}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">15</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
21
QmlMirror.qml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Controls 1.1
|
||||||
|
import QtQuick.Window 2.0
|
||||||
|
|
||||||
|
ApplicationWindow {
|
||||||
|
title: qsTr("Hello World")
|
||||||
|
width: 640
|
||||||
|
height: 250
|
||||||
|
color: "black"
|
||||||
|
|
||||||
|
Clock {
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
}
|
||||||
|
|
||||||
|
Weather {
|
||||||
|
id: weatherId
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
}
|
||||||
|
}
|
20
QmlMirror.qmlproject
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/* File generated by Qt Creator, version 2.7.0 */
|
||||||
|
|
||||||
|
import QmlProject 1.1
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "QmlMirror.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
ImageFiles {
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
// importPaths: [ "../exampleplugin" ]
|
||||||
|
}
|
142
QmlMirror.qmlproject.user
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 3.1.2, 2015-05-14T07:57:40. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.3 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.3 GCC 64bit</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.53.gcc_64_kit</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">-1</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">0</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">QML Scene</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmlProjectManager.QmlRunConfiguration.QmlScene</value>
|
||||||
|
<value type="QString" key="QmlProjectManager.QmlRunConfiguration.MainScript">CurrentFile</value>
|
||||||
|
<value type="QString" key="QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments"></value>
|
||||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{33a03946-c0a5-4644-afa8-64c4fb2256c6}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">15</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
7
Weather.qml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import positioning.weatherinfo 1.0
|
||||||
|
|
||||||
|
|
||||||
|
WeatherInfo {
|
||||||
|
id: weatherdata
|
||||||
|
}
|
230
weatherinfo/WeatherInfo.qml
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
import "components"
|
||||||
|
//! [0]
|
||||||
|
import WeatherData 1.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: window
|
||||||
|
//! [0]
|
||||||
|
width: 360
|
||||||
|
height: 640
|
||||||
|
|
||||||
|
state: "loading"
|
||||||
|
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "loading"
|
||||||
|
PropertyChanges { target: main; opacity: 0 }
|
||||||
|
PropertyChanges { target: wait; opacity: 1 }
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: "ready"
|
||||||
|
PropertyChanges { target: main; opacity: 1 }
|
||||||
|
PropertyChanges { target: wait; opacity: 0 }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
//! [1]
|
||||||
|
AppModel {
|
||||||
|
id: model
|
||||||
|
onReadyChanged: {
|
||||||
|
if (model.ready)
|
||||||
|
window.state = "ready"
|
||||||
|
else
|
||||||
|
window.state = "loading"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
Item {
|
||||||
|
id: wait
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: "Loading weather data..."
|
||||||
|
anchors.centerIn: parent
|
||||||
|
font.pointSize: 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: main
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Column {
|
||||||
|
spacing: 6
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
fill: parent
|
||||||
|
topMargin: 6; bottomMargin: 6; leftMargin: 6; rightMargin: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
width: parent.width
|
||||||
|
height: 25
|
||||||
|
color: "lightgrey"
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: (model.hasValidCity ? model.city : "Unknown location") + (model.useGps ? " (GPS)" : "")
|
||||||
|
anchors.fill: parent
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
if (model.useGps) {
|
||||||
|
model.useGps = false
|
||||||
|
model.city = "Brisbane"
|
||||||
|
} else {
|
||||||
|
switch (model.city) {
|
||||||
|
case "Brisbane":
|
||||||
|
model.city = "Oslo"
|
||||||
|
break
|
||||||
|
case "Oslo":
|
||||||
|
model.city = "Helsinki"
|
||||||
|
break
|
||||||
|
case "Helsinki":
|
||||||
|
model.city = "New York"
|
||||||
|
break
|
||||||
|
case "New York":
|
||||||
|
model.useGps = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
BigForecastIcon {
|
||||||
|
id: current
|
||||||
|
|
||||||
|
width: main.width -12
|
||||||
|
height: 2 * (main.height - 25 - 12) / 3
|
||||||
|
|
||||||
|
weatherIcon: (model.hasValidWeather
|
||||||
|
? model.weather.weatherIcon
|
||||||
|
: "01d")
|
||||||
|
//! [3]
|
||||||
|
topText: (model.hasValidWeather
|
||||||
|
? model.weather.temperature
|
||||||
|
: "??")
|
||||||
|
bottomText: (model.hasValidWeather
|
||||||
|
? model.weather.weatherDescription
|
||||||
|
: "No weather data")
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
model.refreshWeather()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
}
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: iconRow
|
||||||
|
spacing: 6
|
||||||
|
|
||||||
|
width: main.width - 12
|
||||||
|
height: (main.height - 25 - 24) / 3
|
||||||
|
|
||||||
|
property real iconWidth: iconRow.width / 4 - 10
|
||||||
|
property real iconHeight: iconRow.height
|
||||||
|
|
||||||
|
ForecastIcon {
|
||||||
|
id: forecast1
|
||||||
|
width: iconRow.iconWidth
|
||||||
|
height: iconRow.iconHeight
|
||||||
|
|
||||||
|
topText: (model.hasValidWeather ?
|
||||||
|
model.forecast[0].dayOfWeek : "??")
|
||||||
|
bottomText: (model.hasValidWeather ?
|
||||||
|
model.forecast[0].temperature : "??/??")
|
||||||
|
weatherIcon: (model.hasValidWeather ?
|
||||||
|
model.forecast[0].weatherIcon : "01d")
|
||||||
|
}
|
||||||
|
ForecastIcon {
|
||||||
|
id: forecast2
|
||||||
|
width: iconRow.iconWidth
|
||||||
|
height: iconRow.iconHeight
|
||||||
|
|
||||||
|
topText: (model.hasValidWeather ?
|
||||||
|
model.forecast[1].dayOfWeek : "??")
|
||||||
|
bottomText: (model.hasValidWeather ?
|
||||||
|
model.forecast[1].temperature : "??/??")
|
||||||
|
weatherIcon: (model.hasValidWeather ?
|
||||||
|
model.forecast[1].weatherIcon : "01d")
|
||||||
|
}
|
||||||
|
ForecastIcon {
|
||||||
|
id: forecast3
|
||||||
|
width: iconRow.iconWidth
|
||||||
|
height: iconRow.iconHeight
|
||||||
|
|
||||||
|
topText: (model.hasValidWeather ?
|
||||||
|
model.forecast[2].dayOfWeek : "??")
|
||||||
|
bottomText: (model.hasValidWeather ?
|
||||||
|
model.forecast[2].temperature : "??/??")
|
||||||
|
weatherIcon: (model.hasValidWeather ?
|
||||||
|
model.forecast[2].weatherIcon : "01d")
|
||||||
|
}
|
||||||
|
ForecastIcon {
|
||||||
|
id: forecast4
|
||||||
|
width: iconRow.iconWidth
|
||||||
|
height: iconRow.iconHeight
|
||||||
|
|
||||||
|
topText: (model.hasValidWeather ?
|
||||||
|
model.forecast[3].dayOfWeek : "??")
|
||||||
|
bottomText: (model.hasValidWeather ?
|
||||||
|
model.forecast[3].temperature : "??/??")
|
||||||
|
weatherIcon: (model.hasValidWeather ?
|
||||||
|
model.forecast[3].weatherIcon : "01d")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
}
|
||||||
|
//! [2]
|
550
weatherinfo/appmodel.cpp
Normal file
|
@ -0,0 +1,550 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "appmodel.h"
|
||||||
|
|
||||||
|
#include <qgeopositioninfosource.h>
|
||||||
|
#include <qgeosatelliteinfosource.h>
|
||||||
|
#include <qnmeapositioninfosource.h>
|
||||||
|
#include <qgeopositioninfo.h>
|
||||||
|
#include <qnetworkconfigmanager.h>
|
||||||
|
#include <qnetworksession.h>
|
||||||
|
|
||||||
|
#include <QSignalMapper>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonArray>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QUrlQuery>
|
||||||
|
#include <QElapsedTimer>
|
||||||
|
#include <QLoggingCategory>
|
||||||
|
|
||||||
|
/*
|
||||||
|
*This application uses http://openweathermap.org/api
|
||||||
|
**/
|
||||||
|
|
||||||
|
#define ZERO_KELVIN 273.15
|
||||||
|
|
||||||
|
Q_LOGGING_CATEGORY(requestsLog,"wapp.requests")
|
||||||
|
|
||||||
|
WeatherData::WeatherData(QObject *parent) :
|
||||||
|
QObject(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WeatherData::WeatherData(const WeatherData &other) :
|
||||||
|
QObject(0),
|
||||||
|
m_dayOfWeek(other.m_dayOfWeek),
|
||||||
|
m_weather(other.m_weather),
|
||||||
|
m_weatherDescription(other.m_weatherDescription),
|
||||||
|
m_temperature(other.m_temperature)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherData::dayOfWeek() const
|
||||||
|
{
|
||||||
|
return m_dayOfWeek;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* The icon value is based on OpenWeatherMap.org icon set. For details
|
||||||
|
* see http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes
|
||||||
|
*
|
||||||
|
* e.g. 01d ->sunny day
|
||||||
|
*
|
||||||
|
* The icon string will be translated to
|
||||||
|
* http://openweathermap.org/img/w/01d.png
|
||||||
|
*/
|
||||||
|
QString WeatherData::weatherIcon() const
|
||||||
|
{
|
||||||
|
return m_weather;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherData::weatherDescription() const
|
||||||
|
{
|
||||||
|
return m_weatherDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherData::temperature() const
|
||||||
|
{
|
||||||
|
return m_temperature;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WeatherData::setDayOfWeek(const QString &value)
|
||||||
|
{
|
||||||
|
m_dayOfWeek = value;
|
||||||
|
emit dataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WeatherData::setWeatherIcon(const QString &value)
|
||||||
|
{
|
||||||
|
m_weather = value;
|
||||||
|
emit dataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WeatherData::setWeatherDescription(const QString &value)
|
||||||
|
{
|
||||||
|
m_weatherDescription = value;
|
||||||
|
emit dataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WeatherData::setTemperature(const QString &value)
|
||||||
|
{
|
||||||
|
m_temperature = value;
|
||||||
|
emit dataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
class AppModelPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const int baseMsBeforeNewRequest = 5 * 1000; // 5 s, increased after each missing answer up to 10x
|
||||||
|
QGeoPositionInfoSource *src;
|
||||||
|
QGeoCoordinate coord;
|
||||||
|
QString longitude, latitude;
|
||||||
|
QString city;
|
||||||
|
QNetworkAccessManager *nam;
|
||||||
|
QNetworkSession *ns;
|
||||||
|
WeatherData now;
|
||||||
|
QList<WeatherData*> forecast;
|
||||||
|
QQmlListProperty<WeatherData> *fcProp;
|
||||||
|
QSignalMapper *geoReplyMapper;
|
||||||
|
QSignalMapper *weatherReplyMapper, *forecastReplyMapper;
|
||||||
|
bool ready;
|
||||||
|
QElapsedTimer throttle;
|
||||||
|
int nErrors;
|
||||||
|
int minMsBeforeNewRequest;
|
||||||
|
QTimer delayedCityRequestTimer;
|
||||||
|
QTimer requestNewWeatherTimer;
|
||||||
|
|
||||||
|
AppModelPrivate() :
|
||||||
|
src(NULL),
|
||||||
|
nam(NULL),
|
||||||
|
ns(NULL),
|
||||||
|
fcProp(NULL),
|
||||||
|
ready(false),
|
||||||
|
nErrors(0),
|
||||||
|
minMsBeforeNewRequest(baseMsBeforeNewRequest)
|
||||||
|
{
|
||||||
|
delayedCityRequestTimer.setSingleShot(true);
|
||||||
|
delayedCityRequestTimer.setInterval(1000); // 1 s
|
||||||
|
requestNewWeatherTimer.setSingleShot(false);
|
||||||
|
requestNewWeatherTimer.setInterval(20*60*1000); // 20 min
|
||||||
|
throttle.invalidate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void forecastAppend(QQmlListProperty<WeatherData> *prop, WeatherData *val)
|
||||||
|
{
|
||||||
|
Q_UNUSED(val);
|
||||||
|
Q_UNUSED(prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
static WeatherData *forecastAt(QQmlListProperty<WeatherData> *prop, int index)
|
||||||
|
{
|
||||||
|
AppModelPrivate *d = static_cast<AppModelPrivate*>(prop->data);
|
||||||
|
return d->forecast.at(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int forecastCount(QQmlListProperty<WeatherData> *prop)
|
||||||
|
{
|
||||||
|
AppModelPrivate *d = static_cast<AppModelPrivate*>(prop->data);
|
||||||
|
return d->forecast.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void forecastClear(QQmlListProperty<WeatherData> *prop)
|
||||||
|
{
|
||||||
|
static_cast<AppModelPrivate*>(prop->data)->forecast.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
AppModel::AppModel(QObject *parent) :
|
||||||
|
QObject(parent),
|
||||||
|
d(new AppModelPrivate)
|
||||||
|
{
|
||||||
|
//! [0]
|
||||||
|
d->fcProp = new QQmlListProperty<WeatherData>(this, d,
|
||||||
|
forecastAppend,
|
||||||
|
forecastCount,
|
||||||
|
forecastAt,
|
||||||
|
forecastClear);
|
||||||
|
|
||||||
|
d->geoReplyMapper = new QSignalMapper(this);
|
||||||
|
d->weatherReplyMapper = new QSignalMapper(this);
|
||||||
|
d->forecastReplyMapper = new QSignalMapper(this);
|
||||||
|
|
||||||
|
connect(d->geoReplyMapper, SIGNAL(mapped(QObject*)),
|
||||||
|
this, SLOT(handleGeoNetworkData(QObject*)));
|
||||||
|
connect(d->weatherReplyMapper, SIGNAL(mapped(QObject*)),
|
||||||
|
this, SLOT(handleWeatherNetworkData(QObject*)));
|
||||||
|
connect(d->forecastReplyMapper, SIGNAL(mapped(QObject*)),
|
||||||
|
this, SLOT(handleForecastNetworkData(QObject*)));
|
||||||
|
connect(&d->delayedCityRequestTimer, SIGNAL(timeout()),
|
||||||
|
this, SLOT(queryCity()));
|
||||||
|
connect(&d->requestNewWeatherTimer, SIGNAL(timeout()),
|
||||||
|
this, SLOT(refreshWeather()));
|
||||||
|
d->requestNewWeatherTimer.start();
|
||||||
|
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
// make sure we have an active network session
|
||||||
|
d->nam = new QNetworkAccessManager(this);
|
||||||
|
|
||||||
|
QNetworkConfigurationManager ncm;
|
||||||
|
d->ns = new QNetworkSession(ncm.defaultConfiguration(), this);
|
||||||
|
connect(d->ns, SIGNAL(opened()), this, SLOT(networkSessionOpened()));
|
||||||
|
// the session may be already open. if it is, run the slot directly
|
||||||
|
if (d->ns->isOpen())
|
||||||
|
this->networkSessionOpened();
|
||||||
|
// tell the system we want network
|
||||||
|
d->ns->open();
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
AppModel::~AppModel()
|
||||||
|
{
|
||||||
|
d->ns->close();
|
||||||
|
if (d->src)
|
||||||
|
d->src->stopUpdates();
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
void AppModel::networkSessionOpened()
|
||||||
|
{
|
||||||
|
d->src = QGeoPositionInfoSource::createDefaultSource(this);
|
||||||
|
|
||||||
|
if (d->src) {
|
||||||
|
connect(d->src, SIGNAL(positionUpdated(QGeoPositionInfo)),
|
||||||
|
this, SLOT(positionUpdated(QGeoPositionInfo)));
|
||||||
|
connect(d->src, SIGNAL(error(QGeoPositionInfoSource::Error)),
|
||||||
|
this, SLOT(positionError(QGeoPositionInfoSource::Error)));
|
||||||
|
d->src->startUpdates();
|
||||||
|
} else {
|
||||||
|
d->city = "Brisbane";
|
||||||
|
emit cityChanged();
|
||||||
|
this->refreshWeather();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
void AppModel::positionUpdated(QGeoPositionInfo gpsPos)
|
||||||
|
{
|
||||||
|
d->coord = gpsPos.coordinate();
|
||||||
|
|
||||||
|
queryCity();
|
||||||
|
}
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
void AppModel::queryCity()
|
||||||
|
{
|
||||||
|
//don't update more often then once a minute
|
||||||
|
//to keep load on server low
|
||||||
|
if (d->throttle.isValid() && d->throttle.elapsed() < d->minMsBeforeNewRequest ) {
|
||||||
|
qCDebug(requestsLog) << "delaying query of city";
|
||||||
|
if (!d->delayedCityRequestTimer.isActive())
|
||||||
|
d->delayedCityRequestTimer.start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qDebug(requestsLog) << "requested query of city";
|
||||||
|
d->throttle.start();
|
||||||
|
d->minMsBeforeNewRequest = (d->nErrors + 1) * d->baseMsBeforeNewRequest;
|
||||||
|
|
||||||
|
QString latitude, longitude;
|
||||||
|
longitude.setNum(d->coord.longitude());
|
||||||
|
latitude.setNum(d->coord.latitude());
|
||||||
|
|
||||||
|
QUrl url("http://api.openweathermap.org/data/2.5/weather");
|
||||||
|
QUrlQuery query;
|
||||||
|
query.addQueryItem("lat", latitude);
|
||||||
|
query.addQueryItem("lon", longitude);
|
||||||
|
query.addQueryItem("mode", "json");
|
||||||
|
url.setQuery(query);
|
||||||
|
qCDebug(requestsLog) << "submitting request";
|
||||||
|
|
||||||
|
QNetworkReply *rep = d->nam->get(QNetworkRequest(url));
|
||||||
|
// connect up the signal right away
|
||||||
|
d->geoReplyMapper->setMapping(rep, rep);
|
||||||
|
connect(rep, SIGNAL(finished()),
|
||||||
|
d->geoReplyMapper, SLOT(map()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::positionError(QGeoPositionInfoSource::Error e)
|
||||||
|
{
|
||||||
|
Q_UNUSED(e);
|
||||||
|
qWarning() << "Position source error. Falling back to simulation mode.";
|
||||||
|
// cleanup insufficient QGeoPositionInfoSource instance
|
||||||
|
d->src->stopUpdates();
|
||||||
|
d->src->deleteLater();
|
||||||
|
d->src = 0;
|
||||||
|
|
||||||
|
// activate simulation mode
|
||||||
|
d->city = "Brisbane";
|
||||||
|
emit cityChanged();
|
||||||
|
this->refreshWeather();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::hadError(bool tryAgain)
|
||||||
|
{
|
||||||
|
qCDebug(requestsLog) << "hadError, will " << (tryAgain ? "" : "not ") << "rety";
|
||||||
|
d->throttle.start();
|
||||||
|
if (d->nErrors < 10)
|
||||||
|
++d->nErrors;
|
||||||
|
d->minMsBeforeNewRequest = (d->nErrors + 1) * d->baseMsBeforeNewRequest;
|
||||||
|
if (tryAgain)
|
||||||
|
d->delayedCityRequestTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::handleGeoNetworkData(QObject *replyObj)
|
||||||
|
{
|
||||||
|
QNetworkReply *networkReply = qobject_cast<QNetworkReply*>(replyObj);
|
||||||
|
if (!networkReply) {
|
||||||
|
hadError(false); // should retry?
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!networkReply->error()) {
|
||||||
|
d->nErrors = 0;
|
||||||
|
if (!d->throttle.isValid())
|
||||||
|
d->throttle.start();
|
||||||
|
d->minMsBeforeNewRequest = d->baseMsBeforeNewRequest;
|
||||||
|
//convert coordinates to city name
|
||||||
|
QJsonDocument document = QJsonDocument::fromJson(networkReply->readAll());
|
||||||
|
|
||||||
|
QJsonObject jo = document.object();
|
||||||
|
QJsonValue jv = jo.value(QStringLiteral("name"));
|
||||||
|
|
||||||
|
const QString city = jv.toString();
|
||||||
|
qCDebug(requestsLog) << "got city: " << city;
|
||||||
|
if (city != d->city) {
|
||||||
|
d->city = city;
|
||||||
|
emit cityChanged();
|
||||||
|
refreshWeather();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hadError(true);
|
||||||
|
}
|
||||||
|
networkReply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::refreshWeather()
|
||||||
|
{
|
||||||
|
if (d->city.isEmpty()) {
|
||||||
|
qCDebug(requestsLog) << "refreshing weather skipped (no city)";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qCDebug(requestsLog) << "refreshing weather";
|
||||||
|
QUrl url("http://api.openweathermap.org/data/2.5/weather");
|
||||||
|
QUrlQuery query;
|
||||||
|
|
||||||
|
query.addQueryItem("q", d->city);
|
||||||
|
query.addQueryItem("mode", "json");
|
||||||
|
url.setQuery(query);
|
||||||
|
|
||||||
|
QNetworkReply *rep = d->nam->get(QNetworkRequest(url));
|
||||||
|
// connect up the signal right away
|
||||||
|
d->weatherReplyMapper->setMapping(rep, rep);
|
||||||
|
connect(rep, SIGNAL(finished()),
|
||||||
|
d->weatherReplyMapper, SLOT(map()));
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString niceTemperatureString(double t)
|
||||||
|
{
|
||||||
|
return QString::number(qRound(t-ZERO_KELVIN)) + QChar(0xB0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::handleWeatherNetworkData(QObject *replyObj)
|
||||||
|
{
|
||||||
|
qCDebug(requestsLog) << "got weather network data";
|
||||||
|
QNetworkReply *networkReply = qobject_cast<QNetworkReply*>(replyObj);
|
||||||
|
if (!networkReply)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!networkReply->error()) {
|
||||||
|
foreach (WeatherData *inf, d->forecast)
|
||||||
|
delete inf;
|
||||||
|
d->forecast.clear();
|
||||||
|
|
||||||
|
QJsonDocument document = QJsonDocument::fromJson(networkReply->readAll());
|
||||||
|
|
||||||
|
if (document.isObject()) {
|
||||||
|
QJsonObject obj = document.object();
|
||||||
|
QJsonObject tempObject;
|
||||||
|
QJsonValue val;
|
||||||
|
|
||||||
|
if (obj.contains(QStringLiteral("weather"))) {
|
||||||
|
val = obj.value(QStringLiteral("weather"));
|
||||||
|
QJsonArray weatherArray = val.toArray();
|
||||||
|
val = weatherArray.at(0);
|
||||||
|
tempObject = val.toObject();
|
||||||
|
d->now.setWeatherDescription(tempObject.value(QStringLiteral("description")).toString());
|
||||||
|
d->now.setWeatherIcon(tempObject.value("icon").toString());
|
||||||
|
}
|
||||||
|
if (obj.contains(QStringLiteral("main"))) {
|
||||||
|
val = obj.value(QStringLiteral("main"));
|
||||||
|
tempObject = val.toObject();
|
||||||
|
val = tempObject.value(QStringLiteral("temp"));
|
||||||
|
d->now.setTemperature(niceTemperatureString(val.toDouble()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
networkReply->deleteLater();
|
||||||
|
|
||||||
|
//retrieve the forecast
|
||||||
|
QUrl url("http://api.openweathermap.org/data/2.5/forecast/daily");
|
||||||
|
QUrlQuery query;
|
||||||
|
|
||||||
|
query.addQueryItem("q", d->city);
|
||||||
|
query.addQueryItem("mode", "json");
|
||||||
|
query.addQueryItem("cnt", "5");
|
||||||
|
url.setQuery(query);
|
||||||
|
|
||||||
|
QNetworkReply *rep = d->nam->get(QNetworkRequest(url));
|
||||||
|
// connect up the signal right away
|
||||||
|
d->forecastReplyMapper->setMapping(rep, rep);
|
||||||
|
connect(rep, SIGNAL(finished()), d->forecastReplyMapper, SLOT(map()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::handleForecastNetworkData(QObject *replyObj)
|
||||||
|
{
|
||||||
|
qCDebug(requestsLog) << "got forecast";
|
||||||
|
QNetworkReply *networkReply = qobject_cast<QNetworkReply*>(replyObj);
|
||||||
|
if (!networkReply)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!networkReply->error()) {
|
||||||
|
QJsonDocument document = QJsonDocument::fromJson(networkReply->readAll());
|
||||||
|
|
||||||
|
QJsonObject jo;
|
||||||
|
QJsonValue jv;
|
||||||
|
QJsonObject root = document.object();
|
||||||
|
jv = root.value(QStringLiteral("list"));
|
||||||
|
if (!jv.isArray())
|
||||||
|
qWarning() << "Invalid forecast object";
|
||||||
|
QJsonArray ja = jv.toArray();
|
||||||
|
//we need 4 days of forecast -> first entry is today
|
||||||
|
if (ja.count() != 5)
|
||||||
|
qWarning() << "Invalid forecast object";
|
||||||
|
|
||||||
|
QString data;
|
||||||
|
for (int i = 1; i<ja.count(); i++) {
|
||||||
|
WeatherData *forecastEntry = new WeatherData();
|
||||||
|
|
||||||
|
//min/max temperature
|
||||||
|
QJsonObject subtree = ja.at(i).toObject();
|
||||||
|
jo = subtree.value(QStringLiteral("temp")).toObject();
|
||||||
|
jv = jo.value(QStringLiteral("min"));
|
||||||
|
data.clear();
|
||||||
|
data += niceTemperatureString(jv.toDouble());
|
||||||
|
data += QChar('/');
|
||||||
|
jv = jo.value(QStringLiteral("max"));
|
||||||
|
data += niceTemperatureString(jv.toDouble());
|
||||||
|
forecastEntry->setTemperature(data);
|
||||||
|
|
||||||
|
//get date
|
||||||
|
jv = subtree.value(QStringLiteral("dt"));
|
||||||
|
QDateTime dt = QDateTime::fromMSecsSinceEpoch((qint64)jv.toDouble()*1000);
|
||||||
|
forecastEntry->setDayOfWeek(dt.date().toString(QStringLiteral("ddd")));
|
||||||
|
|
||||||
|
//get icon
|
||||||
|
QJsonArray weatherArray = subtree.value(QStringLiteral("weather")).toArray();
|
||||||
|
jo = weatherArray.at(0).toObject();
|
||||||
|
forecastEntry->setWeatherIcon(jo.value(QStringLiteral("icon")).toString());
|
||||||
|
|
||||||
|
//get description
|
||||||
|
forecastEntry->setWeatherDescription(jo.value(QStringLiteral("description")).toString());
|
||||||
|
|
||||||
|
d->forecast.append(forecastEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(d->ready)) {
|
||||||
|
d->ready = true;
|
||||||
|
emit readyChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
emit weatherChanged();
|
||||||
|
}
|
||||||
|
networkReply->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppModel::hasValidCity() const
|
||||||
|
{
|
||||||
|
return (!(d->city.isEmpty()) && d->city.size() > 1 && d->city != "");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppModel::hasValidWeather() const
|
||||||
|
{
|
||||||
|
return hasValidCity() && (!(d->now.weatherIcon().isEmpty()) &&
|
||||||
|
(d->now.weatherIcon().size() > 1) &&
|
||||||
|
d->now.weatherIcon() != "");
|
||||||
|
}
|
||||||
|
|
||||||
|
WeatherData *AppModel::weather() const
|
||||||
|
{
|
||||||
|
return &(d->now);
|
||||||
|
}
|
||||||
|
|
||||||
|
QQmlListProperty<WeatherData> AppModel::forecast() const
|
||||||
|
{
|
||||||
|
return *(d->fcProp);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppModel::ready() const
|
||||||
|
{
|
||||||
|
return d->ready;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppModel::hasSource() const
|
||||||
|
{
|
||||||
|
return (d->src != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString AppModel::city() const
|
||||||
|
{
|
||||||
|
return d->city;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppModel::setCity(const QString &value)
|
||||||
|
{
|
||||||
|
d->city = value;
|
||||||
|
emit cityChanged();
|
||||||
|
refreshWeather();
|
||||||
|
}
|
170
weatherinfo/appmodel.h
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef APPMODEL_H
|
||||||
|
#define APPMODEL_H
|
||||||
|
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
#include <QtCore/QString>
|
||||||
|
#include <QtNetwork/QNetworkReply>
|
||||||
|
#include <QtQml/QQmlListProperty>
|
||||||
|
#include <QDeclarativeExtensionPlugin>
|
||||||
|
#include <QGeoPositionInfo>
|
||||||
|
#include <QGeoPositionInfoSource>
|
||||||
|
|
||||||
|
//#include <QtPositioning/QGeoPositionInfoSource>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
class WeatherData : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString dayOfWeek
|
||||||
|
READ dayOfWeek WRITE setDayOfWeek
|
||||||
|
NOTIFY dataChanged)
|
||||||
|
Q_PROPERTY(QString weatherIcon
|
||||||
|
READ weatherIcon WRITE setWeatherIcon
|
||||||
|
NOTIFY dataChanged)
|
||||||
|
Q_PROPERTY(QString weatherDescription
|
||||||
|
READ weatherDescription WRITE setWeatherDescription
|
||||||
|
NOTIFY dataChanged)
|
||||||
|
Q_PROPERTY(QString temperature
|
||||||
|
READ temperature WRITE setTemperature
|
||||||
|
NOTIFY dataChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit WeatherData(QObject *parent = 0);
|
||||||
|
WeatherData(const WeatherData &other);
|
||||||
|
|
||||||
|
QString dayOfWeek() const;
|
||||||
|
QString weatherIcon() const;
|
||||||
|
QString weatherDescription() const;
|
||||||
|
QString temperature() const;
|
||||||
|
|
||||||
|
void setDayOfWeek(const QString &value);
|
||||||
|
void setWeatherIcon(const QString &value);
|
||||||
|
void setWeatherDescription(const QString &value);
|
||||||
|
void setTemperature(const QString &value);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void dataChanged();
|
||||||
|
//! [0]
|
||||||
|
private:
|
||||||
|
QString m_dayOfWeek;
|
||||||
|
QString m_weather;
|
||||||
|
QString m_weatherDescription;
|
||||||
|
QString m_temperature;
|
||||||
|
//! [1]
|
||||||
|
};
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(WeatherData)
|
||||||
|
|
||||||
|
class AppModelPrivate;
|
||||||
|
//! [2]
|
||||||
|
class AppModel : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(bool ready
|
||||||
|
READ ready
|
||||||
|
NOTIFY readyChanged)
|
||||||
|
Q_PROPERTY(bool hasSource
|
||||||
|
READ hasSource
|
||||||
|
NOTIFY readyChanged)
|
||||||
|
Q_PROPERTY(bool hasValidCity
|
||||||
|
READ hasValidCity
|
||||||
|
NOTIFY cityChanged)
|
||||||
|
Q_PROPERTY(bool hasValidWeather
|
||||||
|
READ hasValidWeather
|
||||||
|
NOTIFY weatherChanged)
|
||||||
|
Q_PROPERTY(QString city
|
||||||
|
READ city WRITE setCity
|
||||||
|
NOTIFY cityChanged)
|
||||||
|
Q_PROPERTY(WeatherData *weather
|
||||||
|
READ weather
|
||||||
|
NOTIFY weatherChanged)
|
||||||
|
Q_PROPERTY(QQmlListProperty<WeatherData> forecast
|
||||||
|
READ forecast
|
||||||
|
NOTIFY weatherChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AppModel(QObject *parent = 0);
|
||||||
|
~AppModel();
|
||||||
|
|
||||||
|
bool ready() const;
|
||||||
|
bool hasSource() const;
|
||||||
|
bool hasValidCity() const;
|
||||||
|
bool hasValidWeather() const;
|
||||||
|
void hadError(bool tryAgain);
|
||||||
|
|
||||||
|
QString city() const;
|
||||||
|
void setCity(const QString &value);
|
||||||
|
|
||||||
|
WeatherData *weather() const;
|
||||||
|
QQmlListProperty<WeatherData> forecast() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
Q_INVOKABLE void refreshWeather();
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
private slots:
|
||||||
|
void queryCity();
|
||||||
|
void networkSessionOpened();
|
||||||
|
void positionUpdated(QGeoPositionInfo gpsPos);
|
||||||
|
void positionError(QGeoPositionInfoSource::Error e);
|
||||||
|
// these would have QNetworkReply* params but for the signalmapper
|
||||||
|
void handleGeoNetworkData(QObject *networkReply);
|
||||||
|
void handleWeatherNetworkData(QObject *networkReply);
|
||||||
|
void handleForecastNetworkData(QObject *networkReply);
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
signals:
|
||||||
|
void readyChanged();
|
||||||
|
void cityChanged();
|
||||||
|
void weatherChanged();
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
private:
|
||||||
|
AppModelPrivate *d;
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
};
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
#endif // APPMODEL_H
|
83
weatherinfo/components/BigForecastIcon.qml
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: current
|
||||||
|
|
||||||
|
property string topText: "20*"
|
||||||
|
property string bottomText: "Mostly cloudy"
|
||||||
|
property string weatherIcon: "01d"
|
||||||
|
property real smallSide: (current.width < current.height ? current.width : current.height)
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: current.topText
|
||||||
|
font.pointSize: 28
|
||||||
|
anchors {
|
||||||
|
top: current.top
|
||||||
|
left: current.left
|
||||||
|
topMargin: 5
|
||||||
|
leftMargin: 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WeatherIcon {
|
||||||
|
weatherIcon: current.weatherIcon
|
||||||
|
useServerIcon: false
|
||||||
|
anchors.centerIn: parent
|
||||||
|
anchors.verticalCenterOffset: -15
|
||||||
|
width: current.smallSide
|
||||||
|
height: current.smallSide
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: current.bottomText
|
||||||
|
font.pointSize: 23
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: parent.width
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
anchors {
|
||||||
|
bottom: current.bottom
|
||||||
|
right: current.right
|
||||||
|
rightMargin: 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
89
weatherinfo/components/ForecastIcon.qml
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: top
|
||||||
|
|
||||||
|
property string topText: "Mon"
|
||||||
|
property string weatherIcon: "01d"
|
||||||
|
property string bottomText: "22*/23*"
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: dayText
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
width: top.width
|
||||||
|
text: top.topText
|
||||||
|
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: top.height / 5 - dayText.paintedHeight
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
WeatherIcon {
|
||||||
|
id: icon
|
||||||
|
weatherIcon: top.weatherIcon
|
||||||
|
|
||||||
|
property real side: {
|
||||||
|
var h = 3 * top.height / 5
|
||||||
|
if (top.width < h)
|
||||||
|
top.width;
|
||||||
|
else
|
||||||
|
h;
|
||||||
|
}
|
||||||
|
|
||||||
|
width: icon.side
|
||||||
|
height: icon.side
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: tempText
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
width: top.width
|
||||||
|
text: top.bottomText
|
||||||
|
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin: top.height / 5 - tempText.paintedHeight
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
}
|
102
weatherinfo/components/WeatherIcon.qml
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: container
|
||||||
|
|
||||||
|
property string weatherIcon: "01d"
|
||||||
|
|
||||||
|
//server icons are too small. we keep using the local images
|
||||||
|
property bool useServerIcon: true
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: img
|
||||||
|
source: {
|
||||||
|
if (useServerIcon)
|
||||||
|
"http://openweathermap.org/img/w/" + container.weatherIcon + ".png"
|
||||||
|
else {
|
||||||
|
switch (weatherIcon) {
|
||||||
|
case "01d":
|
||||||
|
case "01n":
|
||||||
|
"../icons/weather-sunny.png"
|
||||||
|
break;
|
||||||
|
case "02d":
|
||||||
|
case "02n":
|
||||||
|
"../icons/weather-sunny-very-few-clouds.png"
|
||||||
|
break;
|
||||||
|
case "03d":
|
||||||
|
case "03n":
|
||||||
|
"../icons/weather-few-clouds.png"
|
||||||
|
break;
|
||||||
|
case "04d":
|
||||||
|
case "04n":
|
||||||
|
"../icons/weather-overcast.png"
|
||||||
|
break;
|
||||||
|
case "09d":
|
||||||
|
case "09n":
|
||||||
|
"../icons/weather-showers.png"
|
||||||
|
break;
|
||||||
|
case "10d":
|
||||||
|
case "10n":
|
||||||
|
"../icons/weather-showers.png"
|
||||||
|
break;
|
||||||
|
case "11d":
|
||||||
|
case "11n":
|
||||||
|
"../icons/weather-thundershower.png"
|
||||||
|
break;
|
||||||
|
case "13d":
|
||||||
|
case "13n":
|
||||||
|
"../icons/weather-snow.png"
|
||||||
|
break;
|
||||||
|
case "50d":
|
||||||
|
case "50n":
|
||||||
|
"../icons/weather-fog.png"
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
"../icons/weather-unknown.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
smooth: true
|
||||||
|
anchors.fill: parent
|
||||||
|
}
|
||||||
|
}
|
5
weatherinfo/icons/README.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
The scalable icons are from:
|
||||||
|
|
||||||
|
http://tango.freedesktop.org/Tango_Icon_Library
|
||||||
|
http://darkobra.deviantart.com/art/Tango-Weather-Icon-Pack-98024429
|
||||||
|
|
BIN
weatherinfo/icons/weather-few-clouds.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
weatherinfo/icons/weather-few-clouds.xcf
Normal file
BIN
weatherinfo/icons/weather-fog.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
weatherinfo/icons/weather-fog.xcf
Normal file
BIN
weatherinfo/icons/weather-haze.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
weatherinfo/icons/weather-haze.xcf
Normal file
BIN
weatherinfo/icons/weather-icy.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
weatherinfo/icons/weather-icy.xcf
Normal file
BIN
weatherinfo/icons/weather-overcast.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
weatherinfo/icons/weather-overcast.xcf
Normal file
BIN
weatherinfo/icons/weather-showers.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
weatherinfo/icons/weather-showers.xcf
Normal file
BIN
weatherinfo/icons/weather-sleet.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
weatherinfo/icons/weather-sleet.xcf
Normal file
BIN
weatherinfo/icons/weather-snow.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
weatherinfo/icons/weather-snow.xcf
Normal file
BIN
weatherinfo/icons/weather-storm.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
weatherinfo/icons/weather-storm.xcf
Normal file
BIN
weatherinfo/icons/weather-sunny-very-few-clouds.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
weatherinfo/icons/weather-sunny-very-few-clouds.xcf
Normal file
BIN
weatherinfo/icons/weather-sunny.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
weatherinfo/icons/weather-sunny.xcf
Normal file
BIN
weatherinfo/icons/weather-thundershower.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
weatherinfo/icons/weather-thundershower.xcf
Normal file
72
weatherinfo/main.cpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** You may use this file under the terms of the BSD license as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||||
|
** of its contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QtGui/QGuiApplication>
|
||||||
|
#include <QtQuick/QQuickView>
|
||||||
|
#include <QtQml/QQmlEngine>
|
||||||
|
#include <QtQml/QQmlContext>
|
||||||
|
#include <QtQuick/QQuickItem>
|
||||||
|
#include <QLoggingCategory>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
#include "appmodel.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QLoggingCategory::setFilterRules("wapp.*.debug=false");
|
||||||
|
QGuiApplication application(argc, argv);
|
||||||
|
|
||||||
|
qmlRegisterType<WeatherData>("WeatherInfo", 1, 0, "WeatherData");
|
||||||
|
qmlRegisterType<AppModel>("WeatherInfo", 1, 0, "AppModel");
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
qRegisterMetaType<WeatherData>("WeatherData");
|
||||||
|
//! [1]
|
||||||
|
const QString mainQmlApp = QStringLiteral("qrc:///weatherinfo.qml");
|
||||||
|
QQuickView view;
|
||||||
|
view.setSource(QUrl(mainQmlApp));
|
||||||
|
view.setResizeMode(QQuickView::SizeRootObjectToView);
|
||||||
|
|
||||||
|
QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit()));
|
||||||
|
view.setGeometry(QRect(100, 100, 360, 640));
|
||||||
|
view.show();
|
||||||
|
return application.exec();
|
||||||
|
}
|
||||||
|
//! [1]
|
2
weatherinfo/qmldir
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
module Weather
|
||||||
|
plugin WeatherData
|
58580
weatherinfo/qrc_weatherinfo.cpp
Normal file
36
weatherinfo/weatherinfo.pro
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
TEMPLATE = lib
|
||||||
|
TARGET = WeatherData
|
||||||
|
|
||||||
|
CONFIG += qt plugin
|
||||||
|
QT += core network positioning declarative qml quick
|
||||||
|
|
||||||
|
SOURCES += appmodel.cpp \
|
||||||
|
weatherplugin.cpp
|
||||||
|
|
||||||
|
HEADERS += appmodel.h \
|
||||||
|
weatherplugin.h
|
||||||
|
|
||||||
|
target.path = $$[QT_INSTALL_QML]/positioning/weatherinfo
|
||||||
|
INSTALLS += target
|
||||||
|
uri=weatherdata
|
||||||
|
|
||||||
|
OTHER_FILES += \
|
||||||
|
components/BigForecastIcon.qml \
|
||||||
|
components/ForecastIcon.qml \
|
||||||
|
components/WeatherIcon.qml \
|
||||||
|
icons/weather-few-clouds.png \
|
||||||
|
icons/weather-fog.png \
|
||||||
|
icons/weather-haze.png \
|
||||||
|
icons/weather-icy.png \
|
||||||
|
icons/weather-overcast.png \
|
||||||
|
icons/weather-showers.png \
|
||||||
|
icons/weather-sleet.png \
|
||||||
|
icons/weather-snow.png \
|
||||||
|
icons/weather-storm.png \
|
||||||
|
icons/weather-sunny.png \
|
||||||
|
icons/weather-sunny-very-few-clouds.png \
|
||||||
|
icons/weather-thundershower.png \
|
||||||
|
icons/README.txt
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
WeatherInfo.qml
|
20
weatherinfo/weatherinfo.qrc
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>weatherinfo.qml</file>
|
||||||
|
<file>components/BigForecastIcon.qml</file>
|
||||||
|
<file>components/ForecastIcon.qml</file>
|
||||||
|
<file>components/WeatherIcon.qml</file>
|
||||||
|
<file>icons/weather-few-clouds.png</file>
|
||||||
|
<file>icons/weather-fog.png</file>
|
||||||
|
<file>icons/weather-haze.png</file>
|
||||||
|
<file>icons/weather-icy.png</file>
|
||||||
|
<file>icons/weather-overcast.png</file>
|
||||||
|
<file>icons/weather-showers.png</file>
|
||||||
|
<file>icons/weather-sleet.png</file>
|
||||||
|
<file>icons/weather-snow.png</file>
|
||||||
|
<file>icons/weather-storm.png</file>
|
||||||
|
<file>icons/weather-sunny-very-few-clouds.png</file>
|
||||||
|
<file>icons/weather-sunny.png</file>
|
||||||
|
<file>icons/weather-thundershower.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
9
weatherinfo/weatherplugin.cpp
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include "appmodel.h"
|
||||||
|
#include "weatherplugin.h"
|
||||||
|
#include <qqml.h>
|
||||||
|
|
||||||
|
void WeatherPlugin::registerTypes(const char *uri)
|
||||||
|
{
|
||||||
|
qmlRegisterType<WeatherData>(uri, 1, 0, "WeatherData");
|
||||||
|
qmlRegisterType<AppModel>(uri, 1, 0, "AppModel");
|
||||||
|
}
|
15
weatherinfo/weatherplugin.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#ifndef WEATHERPLUGIN_H
|
||||||
|
#define WEATHERPLUGIN_H
|
||||||
|
|
||||||
|
#include <QQmlExtensionPlugin>
|
||||||
|
|
||||||
|
class WeatherPlugin : public QQmlExtensionPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
|
||||||
|
|
||||||
|
public:
|
||||||
|
void registerTypes(const char *uri);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WEATHERPLUGIN_H
|