Frage

So setzen Sie Transparenz eines Rechtecks/Bildschirms.

Ich habe den folgenden Code:

// 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();
}

Und QML -Datei lautet:

//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;
    }
}

Ich habe einen Loader und ein Bild in diesem Bildschirm und die Hintergrundfarbe ist transparent. Wenn ich diese Anwendung ausführe, sollte sie transparenten Hintergrund mit Bild in der Mitte angezeigt werden (da ich keine Loaderquelle festgelegt habe).

Aber was ich bekomme, ist ein Bild in der Mitte mit weißem Hintergrund, das im Bildschirm gefüllt ist. Ich weiß nicht, wer diese weiße Hintergrundfarbe ausfüllt, wie ich transparente Farbe als Hintergrund erwähnt habe.

Ich verwende Qt.4.7.0 und Linux.

Ich habe zwei Flugzeuge in meinem Zielsystem. One ist eine Videoebene und eine andere Grafikebene, wenn ich GUI mit transparentem Hintergrund ausführe (Transparenz an Video festlegen), sollte es Video auf Video -Platz im obigen Beispiel angezeigt. Es zeigt Hintergrund als weiß an Es hätte Video im Videoflugzeug angezeigt haben.

War es hilfreich?

Lösung

Standardmäßig malt das QDeclarativeView einen Hintergrund. Vielleicht ist das das Problem in Ihrem Fall.

Aus http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html

Sie können auch verhindern, dass QDeclarativeView seinen Fensterhintergrund malt, wenn Sie den Hintergrund Ihrer Anwendung mit QML, z. B.

 QDeclarativeView window;
 window.setAttribute(Qt::WA_OpaquePaintEvent);
 window.setAttribute(Qt::WA_NoSystemBackground);
 window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
 window.viewport()->setAttribute(Qt::WA_NoSystemBackground);

Andere Tipps

Meine erste Vermutung ist, dass der Hintergrund weiß und Ihr Rechteck tatsächlich vollständig transparent ist.

Welcher Typ ist Loaderscreen? Ich denke, es ist eine Art QdecalarativeView. Vergibt bitte technische Misses seit fast einem Jahr nicht mehr QT/QML. Da ich mich daran erinnere, war der Standardhintergrund der Ansicht weiß und welche Art von Transparenz Sie trotzdem erreichen möchten?

Wenn Sie nur eine Hintergrundfarbe auf einem QPushButton festlegen, wird der Hintergrund möglicherweise nur angezeigt, wenn Sie die Grenzeigenschaft auf einen Wert festlegen. Dies liegt daran, dass der QpushButton standardmäßig einen nativen Rand zeichnet, der die Hintergrundfarbe vollständig überlappt. Dies könnte eine schwarze rechteckige Box um Qpushbutton zeigen. Sie werden sich diesem Problem vor allem bei Linux -Maschinen stellen. Um dies zu vermeiden, können Sie die Grenzeigenschaft auf keinen haben

Widget-> setStylesheet ("Border: None");

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top