Red de conocimiento informático - Conocimiento informático - Cómo evitar que qml destruya objetos en c++

Cómo evitar que qml destruya objetos en c++

El destructor de un objeto se llama antes de que se destruya el objeto, y cuando se destruye el objeto también está relacionado con su alcance. Por ejemplo, los objetos globales se destruyen cuando finaliza el programa, los objetos automáticos se destruyen cuando salen de su alcance y los objetos dinámicos se destruyen cuando se utiliza el operador de eliminación.

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>

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.