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.

¿Fue útil?

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");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top