Widgets auf QStackedWidget oder andere Lösung für mehrere Widgets
-
Hallo,
ich programmiere mit C++ unter Visual Studio 2019 (Qt 5.15). Ich habe 4 Monitore (Widgets monitor[], alle gleich groß), die über den Konstruktor fest platziert werden. Darin sollen verschiedene Widgets angezeigt werden, die teilweise auch gleichzeitig auf mehreren Monitoren zu sehen sein sollen. Nun habe ich die Klasse QStackedWidget gefunden, und es läuft aber nicht. Offenbar brauche ich laut Doku ein Layout, z.B. QBoxLayout, welchee Layouts mir aber nicht zusagen, da wie gesagt die Widgets auf den Monitoren mit der fest platzierten Stelle verankert sind. Mein Ansatz sieht wie folgt aus:
basis_canvas = new PaintBasis(this); ui->setupUi(this); this->setStyleSheet("background-color: #C0A080"); basis_canvas->setGeometry(0, 0, 1900, 2205); //ScrollArea QScrollArea* scrollArea = new QScrollArea; scrollArea->setWidget(basis_canvas); setCentralWidget(scrollArea); monitorleer = new MonitorLeer(basis_canvas); nd = new ND(basis_canvas); pfd = new PFD(basis_canvas); monitor[0] = new Monitor(basis_canvas, 10, 1070); monitor[1] = new Monitor(basis_canvas, 420, 1070); monitor[2] = new Monitor(basis_canvas, 1020, 1070); monitor[3] = new Monitor(basis_canvas, 1020, 1480); monitorstack[0] = new QStackedWidget(monitor[0]); monitorstack[1] = new QStackedWidget(monitor[1]); monitorstack[2] = new QStackedWidget(monitor[2]); monitorstack[3] = new QStackedWidget(monitor[3]); monitorstack[0]->addWidget(monitorleer); monitorstack[0]->addWidget(pfd); monitorstack[1]->addWidget(monitorleer); monitorstack[1]->addWidget(nd); monitorstack[1]->addWidget(pfd); monitorstack[2]->addWidget(monitorleer); monitorstack[3]->addWidget(monitorleer); monitorstack[0]->setCurrentWidget(pfd); monitorstack[1]->setCurrentWidget(nd); monitorstack[2]->setCurrentWidget(monitorleer); monitorstack[3]->setCurrentWidget(monitorleer);
Was kann ich hier machen? Oder gibt es eine andere Lösung, die das gleiche anzeigen kann? Von den nur hier gezeigten Widgets monitorleer, pfd und nd sollen für mein endgültiges Projekt aber insgesamt 8 Widgets zur Verfügung stehen. Dieser Code hier ist momentan nur zum testen gedacht.
Ich bedanke mich für Lösungsvorschläge. -
Ich habe glücklicherweise selbst eine Lösung gefunden:
MainWindow.cpp
basis_canvas = new PaintBasis(this); ui->setupUi(this); this->setStyleSheet("background-color: #C0A080"); basis_canvas->setGeometry(0, 0, 1900, 2205); //ScrollArea QScrollArea* scrollArea = new QScrollArea; scrollArea->setWidget(basis_canvas); setCentralWidget(scrollArea); nd = new ND(); pfd = new PFD(); for (int i = 0; i <= 3; i++) { monitor[i] = new Monitor(basis_canvas); monitorleer[i] = new MonitorLeer(); } monitor[0]->setGeometry(10, 1070, 400, 400); monitor[1]->setGeometry(420, 1070, 400, 400); monitor[2]->setGeometry(1020, 1070, 400, 400); monitor[3]->setGeometry(1020, 1480, 400, 400); monitor[0]->SetMyChild(pfd); monitor[1]->SetMyChild(nd); monitor[2]->SetMyChild(monitorleer[2]); monitor[3]->SetMyChild(monitorleer[3]);
Monitor.cpp
Monitor::Monitor(QWidget* parent) : QWidget(parent) {} void Monitor::SetMyChild(QWidget* mychild) { mychild->setParent(this); mychild->show(); }
Wenn ich z.B. über die Funktion SetMyChild zugreife und bspw. monitor[0]->SetMyChild(nd); schreibe, springt der nd-Inhalt zwar auf monitor[0] aber der monitor[1], der ja vorher nd hatte, wird dann schwarz. Für meinen Fall aber in Ordnung.