ui auf mehrere Klassen aufteilen

Alles rund um die Programmierung mit Qt
Antworten
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: ui auf mehrere Klassen aufteilen

Beitrag von hilefoks »

Um dir zu helfen benötige ich etwas mehr Code. Wie und wo instanzierst du deine Klasse Teil_B?
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: ui auf mehrere Klassen aufteilen

Beitrag von hilefoks »

Ich habe dir mal ein sehr kleines Beispielprojekt gebaut:
untitled.zip
(2.23 KiB) 368-mal heruntergeladen
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: ui auf mehrere Klassen aufteilen

Beitrag 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
Die Sprache des Technikers ist die Skizze
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: ui auf mehrere Klassen aufteilen

Beitrag 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. ;-)
Antworten