2017-10-09 15 views
0

J'ai donc un diagramme qui change dynamiquement. Je veux montrer la valeur de chaque tranche lorsque la souris survole la tranche, mais je ne suis pas sûr de savoir comment créer l'info-bulle quand onHovered est déclenché. J'utiliseQML Créer des infobulles dynamiquement

qt 5.9.1 & QtQuick.Controls importation 2.2

MISE À JOUR: J'ai ajouté du code pour expliquer comment je crée les tranches. Voici le code:

function onUpdateValues(values){ 
    switch(values.type){ 
      case PIE_CHART: 
       createPieChart(values.data); 
       break; 
      ... 
      default: 
       console.debug("CHART TYPE ERROR"); 
       break; 
      } 
    } 
} 

function createPieChart(data){ 
    pieserieschart.clear(); 
    for (var prop in data) { 
     var new_slice = pieserieschart.append(prop, data[prop]); 
     new_slice.tooltip = prop + ": " + data[prop] 
     //I tried using hovered signal (and without), but it's not doing any difference 
     new_slice.hovered.connect(function(state) { new_slice.tooltip.visible = state }) 
     //If I replace the above line by the next one, I can see the console.log info, but the tooltip is not enabled 
     new_slice.hovered.connect(function(state) { sliceHovered(new_slice, state) }) 

    } 
} 

function sliceHovered(slice, value){ 
    slice.enabled = true 
    console.log("Slice hovered: " + slice.tooltip + " " + value) 
} 

ChartView { /* Chart */ 
    id:chartView 

    PieSeries { 
     id: pieserieschart; 
     size: 1; 
     holeSize: 0.55; 
     onClicked: sliceClicked(slice); 
    } 
} 

Je peux voir la console.log mais je ne suis pas en mesure de voir l'info-bulle, et la sortie de l'application ne montre aucune erreur, mais infobulle n'est pas déclenchée

+0

Où est 'tranche' défini? – sk2212

+0

dynamiquement dans une fonction: function createPieChart (data) { pieserieschart.clear(); pour (var prop dans les données) { var new_slice = pieserieschart.append (prop, data [prop]); nouveau_slice.tooltip = prop + ":" + données [prop] } – laurapons

+0

J'ai essayé de déclarer new_slice.tooltip, et surHovered, je peux lire slice.tooltip, mais il n'est pas affiché – laurapons

Répondre

2

Documents pertinents:

Exemple:

ChartView { 
    id: chartView 

    PieSeries { 
     onHovered: { 
      if (state) 
       chartView.ToolTip.show(slice.label + ":" + slice.value) 
      else 
       chartView.ToolTip.hide() 
     } 
    } 
} 
+0

merci! C'était exactement ce que je cherchais !! :) – laurapons

+0

Le problème avec cette solution est que la position de l'info-bulle est toujours la même (en haut de la vue de la carte, indépendamment de quelle tranche je suis au-dessus). Ce serait idéal si les infobulles apparaissent là où la souris survole ou au-dessus de la tranche) – laurapons

+0

Désolé, je ne connais pas assez Qt Charts, mais je suppose qu'il n'y a actuellement aucun moyen d'interroger la position d'un PieSlice. Au moins, je ne peux rien voir de pertinent dans les documents. Vous pouvez créer un petit assistant C++ et l'exposer à QML pour interroger la position du curseur de la souris avec 'QCursor :: pos()', cependant. – jpnurmi