Seite 1 von 1

ui auf mehrere Klassen aufteilen

Verfasst: 9. Januar 2018 09:39
von Chri
Hi
Vereinfacht dargestellt:
Habe ein ui mit einem QLabel.
Nach Programmstart ui->label->setText("A");
und dann ui->label->setText("B");

Ist kein Problem (Klar, dass man nur "B" sieht - wie schon gesagt vereinfacht dargestellt)

Nun möchte ich jedoch, dass ->label->setText("B"); aus einer Klasse "Teil_B" heraus aufgerufen wird.

Und als Draufgabe: Pushbutton, der setText("C") bewirkt und dessen Slot in "Teil_B" beheimatet ist.

Habe Folgendes versucht:
mainwindow.h: Ganz normal, wie es der Creator erzeugt
--------------
teil_b.h:

#ifndef B_H
#define B_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
class Teil_B
{
public:
explicit Teil_B(Ui::MainWindow *dasUi);

private slots:
void on_pushButton_clicked();

private:
Ui::MainWindow *UIVonMain;

};

#endif // B_H
-----------------
mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "teil_b.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

ui->label->setText("A");
// ui->label->setText("B"); Das in Klasse "Teil_B" verschieben.
// Und hier sollte Teil_B aufgerufen werden. Doch wie?
----------------------
teil_b.cpp:

#include "teil_b.h"

Teil_B::Teil_B(Ui::MainWindow *dasUi)
{
qDebug()<<"B gestartet";

UIVonMain = dasUi;
UIVonMain->label->setText("B");

}

void Teil_B::on_pushButton_clicked()
{
qDebug()<<"geklickt";
UIVonMain->label->setText("C");
}

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 10. Januar 2018 11:32
von Chri
Nachtrag zu "Und hier sollte Teil_B aufgerufen werden. Doch wie?"

Es soll doch der pointer übergeben werden, also Teil_B (*ui) Oder?

Das Programm wird zwar ausgeführt, Teil_B jedoch anscheinend vollkommen ignoriert:
Nicht mal qDebug()<<"B gestartet"; wird angezeigt.

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 10. Januar 2018 16:54
von hilefoks
Um dir zu helfen benötige ich etwas mehr Code. Wie und wo instanzierst du deine Klasse Teil_B?

Re: ui auf mehrere Klassen aufteilen

Verfasst: 10. Januar 2018 20:37
von Chri
Na ja, das ist eigentlich schon der gesamte Code. (Vom Prinzip her)
Wenn ich alles in mainwindow habe, funktioniert es.
Wenn ich den Code splitten möchte (Teil_B), funktioniert es nicht.
Was ich mir dann erwarte:
Dass nach dem Starten das Label "B" zeigt (So einen langsamen PC, dass man "A" sieht, wird's ja hoffentlich nicht geben :lol: )
und wenn man den Pushbutton klickt, soll "C" erscheinen.

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 10. Januar 2018 21:07
von hilefoks
Ich habe dir mal ein sehr kleines Beispielprojekt gebaut:
untitled.zip
(2.23 KiB) 547-mal heruntergeladen

Re: ui auf mehrere Klassen aufteilen

Verfasst: 11. Januar 2018 11:39
von Chri
Danke hilefoks für das Beispiel, ist interessant und lehrreich, löst ein Problem, das ich schon mal hatte, ob/wie es mein momentanes Problem löst, muss ich erst behirnen.

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 11. Januar 2018 13:30
von Chri
Jetzt hab ich den Auslöser des Ganzen schon ganz aus den Augen verloren gehabt:

Wenn man Qtabwidgets verwendet, schreibt QT den Code leider für alle Tabs in die selbe Klasse.
Ich habe z.B. in tab1 Tabellen etc. und in tab2 auch Tabellen etc.
Und als Ergebnis einen Haufen mit Code für alle.
Ich möchte für jeden tab eine eigene Klasse haben, in der auch der ui-Zugriff auf die Objekte des Tabs möglich ist.

Aber abgesehen davon erscheint mir das Ganze logisch:
Ich habe verschiedene "Themen", die in einer gemeinsamen ui dargestellt werden (Und aus dieser ui heraus auch beeinflusst werden).
Der Code für jedes Thema ist in einer eigenen Klasse, von der aus auch die für das Thema relevanten ui-Objekte angesprochen werden können.
Irgendwie wundert es mich, dass das anscheinend so ein exotisches Anliegen ist, für das es eigentlich eine Standardlösung geben sollte...

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 11. Januar 2018 16:50
von Chri
Ups, das war jetzt ein Blödsinn, was ich über die Qtabwidgets gesagt habe:
Die einzelnen Tabs sind QWidgets, die man auch mit eigenen Klassen ersetzen kann.
Muss ich erst ausprobieren.

LG
Chri

Re: ui auf mehrere Klassen aufteilen

Verfasst: 11. Januar 2018 20:44
von hilefoks
Chri hat geschrieben: 11. Januar 2018 16:50Die einzelnen Tabs sind QWidgets, die man auch mit eigenen Klassen ersetzen kann.

Jetzt bist du auf dem richtigem Weg. ;-)