QML: La transparencia para un rectángulo no funciona
Pregunta
Cómo establecer la transparencia de un rectángulo/pantalla.
Tengo el siguiente código:
// main.cpp
void main(int argc, char*[] argv)
{
QApplication::setGraphicsSystem("raster");
QApplication app(argc, argv);
QDeclerativeView view;
view.setSource(QUrl::fromLocalFile("loaderTest.qml"));
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
view.showFullScreen();
//QRegion mask(10, 10, 100, 100);
//view.setMask();
view.show();
app.exec();
}
Y el archivo QML es:
//loaderTest.qml
Rectangle
{
id: mainRectangle
width: 1000
height: 700
color: "transparent"
//color: "#00000000"
Image
{
id: image1;
width: 348;
height: 155;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.verticalCenter: parent.verticalCenter;
source: "test.png"
}
Loader
{
id: mainLoader
anchors.fill: parent;
source: "";
focus: true;
}
}
Tengo un cargador y una imagen en esta pantalla y el color de fondo es transparente. Cuando ejecuto esta aplicación, debe mostrar fondo transparente con imagen en el centro (ya que no he establecido la fuente del cargador).
Pero lo que estoy obteniendo es una imagen en el centro con fondo blanco relleno en la pantalla, no sé quién está llenando este color de fondo blanco, ya que he mencionado el color transparente como fondo.
Estoy usando Qt.4.7.0 y Linux.
Tengo dos planos en mi sistema de destino, uno es el plano de video y otro es el plano gráfico, cuando ejecuto la GUI con fondo transparente (establecer transparencia en el lugar de video) debe mostrar el video en el lugar de video en el ejemplo anterior, muestra fondo como blanco, como Debería haber mostrado video reproduciéndose en el avión de video.
Solución
Por defecto, el QDeclarativeView pinta un fondo. Tal vez ese es el problema en su caso.
De http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html
También puede evitar que QDeclarativeView pinte el fondo de su ventana si proporciona los antecedentes de su aplicación utilizando QML, por ejemplo
QDeclarativeView window;
window.setAttribute(Qt::WA_OpaquePaintEvent);
window.setAttribute(Qt::WA_NoSystemBackground);
window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
window.viewport()->setAttribute(Qt::WA_NoSystemBackground);
Otros consejos
Mi primera suposición es que el fondo es blanco y su rectángulo es completamente transparente.
¿Qué tipo es Loaderscreen? Supongo que es algún tipo de QDecalarativeView, por favor, perdona las fallas técnicas que no han codificado QT/QML durante casi un año. Como recuerdo, el fondo predeterminado de la vista era blanco y ¿qué tipo de transparencia espera lograr de todos modos?
Si solo establece un color de fondo en un QpushButton, el fondo puede no aparecer a menos que establezca la propiedad fronteriza en algún valor. Esto se debe a que, por defecto, el QpushButton dibuja un borde nativo que se superpone por completo al color de fondo. Esto podría mostrar una caja rectangular negra alrededor de QpushButton. Enfrentará este problema especialmente en las máquinas Linux. Para evitar esto, puede establecer la propiedad fronteriza en ninguno
widget-> setstylesheet ("border: none");