3 votes

Comment rendre transparent le widget Dock QT

Sur Windows, j'essaie de créer une application Qt avec des DOCKWIDGETS transparents, où l'arrière-plan du widget de dock est transparent lorsqu'il est flottant. Ainsi, nous pouvons voir à travers le widget de dock. Actuellement, il est affiché en noir comme ci-dessous.

entrer la description de l'image ici Code comme ci-dessous

    QDockWidget * dock3 = new QDockWidget(tr("DOCK3 TranslucentBackground"), 
    textEdit,Qt::FramelessWindowHint);
    dock3->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    //dock3->setWindowFlags(dock2->windowFlags()|Qt::FramelessWindowHint);
    dock3->setAttribute(Qt::WA_TranslucentBackground);
    //dock3->setAttribute(Qt::WA_NoSystemBackground);
   {
        QWidget* WindowRect = new QWidget(dock3);
        QWidget* titleRect = new QLabel ("Titre",WindowRect);
        titleRect->setFixedSize(QSize(30,60));
        titleRect->setStyleSheet("arrière-plan:rgb(0,0,255);");
        QWidget* ContentRect = new QLabel("Contenu",WindowRect);
        ContentRect->setFixedSize(QSize(60,30));
        ContentRect->setStyleSheet("arrière-plan:rgb(0,255,0);");
        QVBoxLayout* layout = new QVBoxLayout(WindowRect);
        layout->addWidget(titleRect);
        layout->addWidget(ContentRect);
        dock3->setWidget(WindowRect);
    }

0voto

luv4bytes Points 144

Une façon est d'utiliser setWindowOpacity(qreal) du QDockWidget.
Mais gardez à l'esprit que cela appliquera l'opacité à tous les enfants du QDockWidget.

Pour référence : https://doc.qt.io/qt-5/qwidget.html#windowOpacity-prop

Une autre façon est d'utiliser des feuilles de style : setStyleSheet("background-color: transparent;");. Malheureusement, cela ne fonctionne pas pour les widgets de niveau supérieur tant que vous n'avez pas défini l'attribut WA_TranslucentBackground du widget de base.

Pour référence :
https://doc.qt.io/qt-5/stylesheet.html
https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop

0voto

MrMins Points 5677

Essayez avec cet article: Qt astuce & Trick: Masquer les widgets

Vous pouvez le faire avec:

setStyleSheet("background-color: rgba(0,0,0,0)");

Vous pouvez essayer de le faire dans la personnalisation du dessin en changeant le style de votre widget comme:

MyCustomWidget {background-color: none;}

Cela devrait fonctionner

0voto

jpo38 Points 1089

Je comprends que tu veux seulement voir à travers la barre d'accostage lorsque celle-ci est en flottaison. Quand elle n'est pas (accostée), cela n'a pas de sens car il n'y a rien derrière à montrer.

L'utilisation de setAttribute(Qt::WA_TranslucentBackground) fait l'affaire. Je suis sous Linux, avec un peu de chance, cela fonctionne également pour Windows (j'ai trouvé des publications où les gens définissent également setAttribute(Qt::WA_NoSystemBackground), cela n'a pas fait de différence pour moi sous Linux, si Qt::WA_TranslucentBackground ne suffit pas pour vous, essayez avec les deux).

#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;

    w.setCentralWidget( new QWidget() );
    w.centralWidget()->setStyleSheet("background-color: green");

    QDockWidget* dock = new QDockWidget();
    dock->setWidget( new QLabel("Bonjour le monde", dock));

    // rendre la barre d'accostage transparente !
    dock->setAttribute(Qt::WA_TranslucentBackground);

    w.addDockWidget(Qt::BottomDockWidgetArea, dock, Qt::Horizontal);

    w.show();

    return a.exec();
}

En étant accosté, cela ressemble à ceci :

description de l'image

En flottaison, cela ressemble à ceci :

entrer la description de l'image ici

Vous pouvez voir le widget central (vert), être visible à travers la barre d'accostage.

Référence : Rendre un QWidget transparent

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X