2011-02-01 3 views
1

Avec un peu d'aide de vos sages QT, j'ai été en mesure d'implémenter cette fenêtre, avec le comportement désiré de disposition et de resizeability. Maintenant, j'ai un autre problème intéressant.QT: Mise en page complexe et image de fond de fenêtre transparente

Je souhaite que ma fenêtre entière ait un motif transparent "repeat-xy". Si je l'applique à une fenêtre simple sans mise en page et widgets internes, cela fonctionne parfaitement. Cependant, j'ai maintenant un "arbre" de widgets dans les widgets, et je ne peux pas définir la feuille de style pour dessiner mon image de fond transparente à chacun, car elle semble non naturelle. L'image doit être sous-jacente à toute la topologie de widget que j'ai. Le problème est, il est invisible quand je l'applique au widget tout en bas de la fenêtre parce qu'il a des widgets au-dessus.

Existe-t-il une solution? peut-être "widgets transparents" qui peuvent contenir des widgets visibles?

My window

+0

Je suppose que je suis à la recherche d'un « div » sorte d'une solution, un récipient qui ne se tire pas et laisse ce qui est visuel en dessous « briller à travers » – JasonGenX

Répondre

2

J'ai fait ce qui suit en utilisant seulement CSS, il y a un QPlainTextEdit, deux QPushButton et un QLineEdit. Dans l'image, j'ai ajouté une bordure rouge à la QPlainTextEdit ne peut donc être vu, les règles sont les suivantes

QWidget#Form{ 
    background-image: url(:/img/elephant_pattern.gif); 
} 
QPlainTextEdit{ 
    background:transparent; 
    border:1px solid red; 
} 

Comme vous pouvez le voir tout ce que je devais était mise en arrière-plan transparent dans les widgets que je voulais.

enter image description here

0

Écrivez votre propre widget qui hérite QWidget. Réimplémentez le paintEvent et laissez-le vide. Le widget lui-même ne sera pas dessiné, mais ses enfants le seront.

my_widget::my_widget(QWidget* parent) : QWidget(parent) 
{ 
} 

void my_widget::paintEvent(QPaintEvent* p_event) 
{ 
    // left empty to let my_widget be invisible 
} 

test_mw::test_mw(QWidget *parent) : QMainWindow(parent) 
{ 
    test_widget = new my_widget(this); 

    QHBoxLayout* layout = new QHBoxLayout(); 

    QPushButton* button0 = new QPushButton("Button 0", 0); 
    QPushButton* button1 = new QPushButton("Button 1", 0); 

    layout->addWidget(button0); 
    layout->addWidget(widget); 

    test_widget->setLayout(layout); 

    setCentralWidget(test_widget); 
} 

enter image description here

Bien que le paintEvent de my_widget est vide, les deux QPushButton sont tirés. :-)