Cómo evitar que qml destruya objetos en c++
importar gráficos 1.0
importar QtQuick 1.0
Artículo {
ancho: 300 alto: 200
PieChart {
id: aPieChart
anclajes.centerIn: padre
ancho: 100; alto: 100
color: "rojo"
onChartCleared: console.log("El gráfico se ha borrado")
}
MouseArea {
Anchors.fill: parent
onClicked: aPieChart.clearChart()
}
Texto {
anclajes { parent.bottom; horizontalCenter; bottomMargin: 20 }
text:"Haga clic en cualquier lugar para borrar el gráfico"
}
}
}< p> p>
Archivo:SimpleChart2.png?
Agregar métodos de llamada y señales en la clase C++
Echemos un vistazo a lo que debemos hacer en la clase C++:
clase PieChart: QDeclarativeItem público
{
...
público:
...< / p>
Q_INVOKABLE void clearChart();
Señal:
void chartCleared();
...
} ;
El uso de Q_INVOKABLE le da al sistema de metaobjetos Qt acceso al método clearChart(), por lo que QML también puede acceder a él. Tenga en cuenta que, dado que las ranuras también se pueden llamar desde QML, clearChart() también se puede declarar como una ranura Qt sin usar Q_INVOKABLE.
El método clearChart() establece el color del lápiz para dibujar el gráfico circular en Qt::transparent, vuelve a dibujar el gráfico circular y finalmente emite la señal chartCleared():
void PieChart ::clearChart()
{
setColor(QColor(Qt::transparent));
update();
emitir chartCleared();
}
Ejecutar el programa
Ahora podemos iniciar esta aplicación y hacer clic en su área de ventana para que el sector de la ventana desaparezca y el de la aplicación. El resultado es el siguiente:
El gráfico se ha borrado
Puede encontrar el código completo de este programa en el directorio de ejemplos/tutoriales/extending/chapter2-methods de Qt.