Le style Transparent de QWidget/QScrollArea n'a aucun effet

Cette question se rapporte à

je demande ici parce que je crois que la communauté SO pourrait avoir un moyen de corriger ce comportement.

J'aime donc définir la couleur de fond d'une ScrollArea à l'un ou l'autre être transparent ou une image de fond personnalisée car elles contiennent des bannières. Je suis en cours d'exécution dans le Qt Creator ( Designer) déjà! : -):

Qt Creator sample

mais lors du déploiement de l'application sur le simulateur il ne fonctionnera pas, les restent Gris, Gris Foncé:

Emulator sample

Voici mon arbre de mise en page:

Layout Tree

et voici la feuille de style que j'utilise MainWindow):

QMainWindow {
    background: transparent url(:/ui/designs/images_from_android/bg_plain_empty.png) top left;
}
QWidget#centralWidget {
    background-color: transparent;
}
QPushButton {
    color: red;
    border: 1px solid green;
}
QFrame#top_header {
    background: transparent url(:/ui/designs/images_from_android/bg_title_bar_landscape.png) top left repeat-x;
}
QWidget#top_banner_scroll1,
QWidget#top_banner_scroll2 {
    background: transparent url(:/ui/designs/images_from_android/stripe_bg.png) top left repeat-x;
}

C'est assez déroutant. Et en tant que Designer Qt me montre le bon design...

14
demandé sur sashoalm 2011-01-28 10:46:14

4 réponses

Pouvez-vous essayer scrollArea.setStyleSheet("background-color:transparent;"); ça marche pour moi.

2
répondu Lwin Htoo Ko 2011-03-08 09:15:05

utilisez la feuille de style

QScrollArea { background: transparent; }
QScrollArea > QWidget > QWidget { background: transparent; }
QScrollArea > QWidget > QScrollBar { background: palette(base); }

Pour comprendre ce qui permet asume un semblable, mais simplyfied mise en page:

scrollarea            QScrollArea
  + scrollareaContent QWidget
      + label         QLabel

il est Intéressant de noter il y a deux widgets avec un fond non transparent. La première est l' scrollarea lui-même (transparents avec la première ligne de la feuille de style).

L'autre (auquel je ne m'attendais pas) est scrollareaContent qui est traité avec la deuxième ligne. Il y a la première QWidget est le viewport privé de QScrollArea qui n'a pas pu être consulté directement. L'autre est l' scrollareaContent. Cette approche devrait rendre toutes les versions de Qscrolla transparentes sans affecter aucun des autres widgets.

mise à jour: j'ai ajouté une troisième ligne à la feuille de style qui empêche les barres de défilement de devenir transparentes car elles sont aussi des QWidgets deux niveaux en dessous de QScrollArea.

12
répondu Johannes Matokic 2018-01-11 14:30:03

en utilisant les feuilles de style suivantes, j'ai pu rendre la zone de défilement transparente, tout en gardant la couleur de fond par défaut pour les barres de défilement:

scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}");
scrollAreaContents.setStyleSheet("background-color:transparent;");
4
répondu Jadamec 2014-03-14 11:09:59

ne devriez-vous pas mettre styles à QScrollArea#top_banner1 et QScrollArea#top_banner2?

vous sélectionnez actuellement les qwidgets de viewport et, d'après mon expérience, les qwidgets purs ont toujours des fonds transparents et ne supportent pas le style. Ainsi, si la zone de défilement a une couleur, il affichera à travers.

PS. Pur style!

0
répondu andref 2011-03-09 15:22:08