2016-07-15 19 views
4

Ich versuche, dieses Layout zu erreichen:Widget in einem anderen Widget Qt

enter image description here

wo Widget1 einige Widget (Zentral-Widget von QMainWindow) und ich will zweiten Widget Widget2 über sie hinzufügen, aber es sollte sein in der linken unteren Ecke von Widget1.


EDIT: meine bisherige Beschreibung war nicht sehr nützlich, so dass ich es in mehr Details zu beschreiben versuchen.

Ich erben QWidget-Klasse (class MyClass : public QWidget) und erstellen mein eigenes Widget, wo ich in void MyClass ::paintEvent(QPaintEvent *event) etwas auf dem Bildschirm zeichnen. MyClass ist dann centralWidget meiner QMainWindow.

Jetzt möchte ich noch ein kleineres Widget (Widget2 im Bild) hinzufügen, wo ich ein Video anzeigen würde (hier frage ich nicht, wie man nur Video anzeigt, wie man dieses Widget2 zu meiner Ansicht hinzufügt). Hauptsache hier ist, dass Widget2 ist innerhalb (Floating in) Widget1.

EDIT2: Voriger Code, den ich gepostet habe, ist Müll.

+1

„es scheint nicht zu funktionieren“ ist nicht eine sehr gute Beschreibung des Problems. Brauche auch mehr Informationen, vorzugsweise mehr Code. Welches Layout verwendest du? Was gibt es sonst noch im Layout? Abhängig davon, was es sonst noch gibt, möchten Sie wahrscheinlich QGridLayout, obwohl Sie auch auf andere Weise erreichen können, was Sie wollen. Verwenden Sie Designer oder erstellen Sie die Widgets in Ihrem eigenen Code? – hyde

+0

Sie sollten zuerst Layout-Objekt nach Anforderung erstellen, überprüfen Sie diese [link] (http://doc.qt.io/qt-4.8/layout.html) –

+0

Könnten Sie meine Bearbeitung überprüfen, ich habe versucht, genauer zu sein. – carobnodrvo

Antwort

5

Verwenden QGridLayout die Position des Widgets zu setzen:

QGridLayout* layout = new QGridLayout(this); 
// 2x2 layout 
QWidget* green = new QWidget(this); 
green->setStyleSheet("background:green;"); 
QWidget* yellow = new QWidget(this); 
yellow->setStyleSheet("background:yellow;"); 
QWidget* red = new QWidget(this); 
red->setStyleSheet("background:red;"); 
QWidget* blue = new QWidget(this); 
blue->setStyleSheet("background:blue;"); 
layout->addWidget(green, 0, 0); // Top-Left 
layout->addWidget(yellow, 0, 1); // Top-Right 
layout->addWidget(red, 1, 0); // Bottom-Left 
layout->addWidget(blue, 1, 1); // Bottom-Right 
ui->centralWidget->setLayout(layout); 

wird Ihnen etwas wie folgt aus:

enter image description here

So Gewohnheit Ihre eigene Widget mit QGridLayout und stellen Sie die Position des dein Widget darin.

Set ein anderes Widget als Elternteil mit schwarzem Hintergrund:

QGridLayout* layout = new QGridLayout(this); 
// 2x2 layout 
QWidget* green = new QWidget(this); 
green->setStyleSheet("background:green;"); 
QWidget* yellow = new QWidget(this); 
yellow->setStyleSheet("background:yellow;"); 
QWidget* red = new QWidget(this); 
red->setStyleSheet("background:red;"); 
QWidget* blue = new QWidget(this); 
blue->setStyleSheet("background:blue;"); 
layout->addWidget(green, 0, 0); // Top-Left 
layout->addWidget(yellow, 0, 1); // Top-Right 
layout->addWidget(red, 1, 0); // Bottom-Left 
layout->addWidget(blue, 1, 1); // Bottom-Right 

QWidget* mainWidget = new QWidget(this); 
mainWidget->setStyleSheet("background:black;"); 
mainWidget->setLayout(layout); 

QHBoxLayout* centralLayout = new QHBoxLayout(this); 
centralLayout->addWidget(mainWidget); 
ui->centralWidget->setLayout(centralLayout); 

enter image description here

+0

Die Hauptsache, die ich versuche zu erreichen, ist, dass ich ein Widget (Widget1 im Bild) und ein anderes Widget ** über ** es (Widget2 im Bild) habe. – carobnodrvo

+0

ui-> centralWidget ist Ihr Haupt-Widget, und der Rest ist drüber. Ich habe ein neues Beispiel mit einem Eltern-Widget mit schwarzem Hintergrund hinzugefügt und das andere drüber – mohabouje

+0

Danke, das war hilfreich, das Einzige, was ich jetzt habe, ist, dass ich nur 1 Widget habe (zB unten links) und es gestreckt ist als ob ich die Größe nicht ändern kann. Weißt du, wie ich das lösen könnte? – carobnodrvo