Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.0 - Qt Creator : 4.3.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Upload / download de fichier dans le Cloud simplement

Bonjour

Je sais pas si c'est le bon forum mais depuis le temps j'avais envie de poster du code (en temps que développeur ça commençait à me démanger grave ]:D ).

Voici une petit application Qml Qui utilise les objets Qml de Zeecrowd "ZcClient 1.0".
Cette application permet de changer le fond d'écran de son application en "uploadant" un fichier de son disque dur et notifie tout les participants de l'application que le fond d'écran a changé.
Les autres participants voient donc le fond d'écran de l'application se changer en "temps réel".

le code est simple et parle de lui même :-) :

import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Dialogs 1.1

import ZcClient 1.0

ZcAppView
{
id : mainView
anchors.fill : parent

toolBarActions :
[
Action {
id: closeAction
shortcut: "Ctrl+X"
iconSource: "qrc:/Crowd.Widgets/Resources/close.png"
tooltip : "Close Application"
onTriggered: mainView.close();
}
},
Action {
id: uploadAction
iconSource: "qrc:/SR/upload.png"
tooltip : "Change background"
onTriggered: {
mainView.state = "upload"
fileDialog.open()
}
}
,
Action {
id: downloadAction
iconSource: "qrc:/SR/download.png"
tooltip : "Change background"
onTriggered: {
mainView.state = "download"
progressbar.visible = true
sharedResource.downloadFile("backgroundimage",queryStatus);
}
}
]

ZcCrowdActivity
{
id : zcCrowdActivity
onStarted : backgroundImage.source = sharedResource.getUrl("backgroundimage")
}

ZcCrowdSharedResource
{
id : sharedResource
}


ZcMessageSender
{
id : notifier
subject : "ImageChanged"
}

ZcStorageQueryStatus
{
id : queryStatus

onCompleted : {
progressbar.visible = false
notifier.sendEvent("","backgroudChanged")
if (mainView.state === "download")
Qt.openUrlExternally(sharedResource.localPath)
}
onProgress : progressbar.value = value;
}

ZcMessageListener
{
subject : "ImageChanged"
onMessageReceived : {
backgroundImage.source = ""
backgroundImage.source = sharedResource.getUrl("backgroundimage")
}
}

FileDialog
{
id: fileDialog
nameFilters: [ "Image files (*.jpg *.png *.gif *.png *.tiff)", "All files (*)" ]
onAccepted:
{
progressbar.value = 0;
progressbar.visible = true;
sharedResource.uploadFile("backgroundimage",fileUrl,queryStatus);
}
}

Image
{
id : backgroundImage
anchors.fill : parent

ProgressBar
{
id : progressbar
width : parent.width
height : 30
minimumValue: 0
maximumValue: 100
visible: false
}
}

onLoaded : zcCrowdActivity.start();
onClosed : zcCrowdActivity.stop();
}

Q'en pensez vous ?

Réponses

  • Impossible pour moi de juger, mes connaissances en qml sont pour le moment proches du zéro absolu.
    Mais cependant, heureux du partage de connaissances.
  • Sympa de partager du code (en plus en QML), ça aide à mieux voir ce que propose Zeecrowd

    Une remarque par contre : c'est dommage les noms qui commencent avec Zc. Je trouve que ça aurait été mieux de ne pas les mettre et laisser l'utilisateur ajouter un namespace en cas de risque de conflit avec les noms :

    // pas de conflit sur les noms
    import ZcClient 1.0

    AppView { // ApplicationView ? par symétrie avec ApplicationWindow ?
    }

    // risque de conflit sur les noms
    import ZcClient 1.0 as Zc

    Zc.AppView {
    }
    En tout cas, le code est propre et la syntaxe respecte l'esprit de Qt/Qml
  • Bonjour

    Merci pour ce retour. Nous avons hésité sur le fait de mettre Zc ou pas devant nos objets.

    Tu viens de nous convaincre ]:D

    Je vais essayer de les enlever pour la prochaine version de zeecrowd en gardant une compatibilité c'est à dire enregistrer les types sous les deux noms.
    Reste à mettre la doc des API à jour et les tutoriaux (petit à petit :-))
    En tout cas je suis en train décrire dans le même style : "Comment faire un chat simplement" et je vais partir directement sur ta syntaxe.

    Cordialement
  • Bonjour gbdrivers

    Voila c'est fait :-)

    J'ai intégré tes recommandations dans la dernières version et mit les tutoriaux à jour.

    Merci encore
Connectez-vous ou Inscrivez-vous pour répondre.