[Frage] Wie kann Ich auf Widgets in MainWindow zugreifen?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Toshan
Beiträge: 2
Registriert: 8. September 2014 11:44
Wohnort: Hannover

[Frage] Wie kann Ich auf Widgets in MainWindow zugreifen?

Beitrag von Toshan »

EDIT: Ich habe jetzt alles menuBar() bezogene wieder zurück nach MainWindow.cpp verschoben. Menü wird angezeigt und funktioniert auch.
Kann leider immer noch nicht aus der Datei FileEditor.cpp auf das QTextEdit Widget in MainWindow.cpp zugreifen: Not defined in Scope.
Habe mir mal das Browser Example angeschaut: Muss Ich wirklich eine eigene QTextEdit Klasse schreiben um damit arbeiten zu können? Warum macht Qt das ganze nur so unnötig kompliziert. Mit Standard C++ kann Ich jederzeit auf Inhalte von anderen Klassen etc. zugreifen.
+++++++++++++++++++++++++++++++

Ich habe diverse Widgets in MainWindow.h + MainWindow.cpp erzeugt, auf die Ich gerne aus anderen Dateien zugreifen will, um damit zu arbeiten. Zum Beispiel:
A.) TextEditor (QTextEdit) soll von FileEditor.cpp aus erreichbar sein
B.) BrowserModule (QWebView) soll von Browser.cpp erreichbar sein

Bekomme aber jedesmal die Meldung "TextEditor was not defined in this Scope" wenn Ich diese Testweise aus FileEditor.cpp heraus aufrufen will:

Code: Alles auswählen

void FileEditor::CreateNewEmptyFile()
{
  //Test Code...
   TextEditor->setText("CreateNewEmptyFile triggered. This Area should be 'Empty' now.");
}
EDIT02: Folgender Mini Code funktioniert jedenfalls problemlos:

Code: Alles auswählen

void FileEditor::CreateNewEmptyFile()
{
QMessageBox *testAufruf = new QMessageBox;
    testAufruf->setText("FileEditor::CreateNewEmptyFile() wurde erfolgreich aufgerufen");
    testAufruf->show();
}
[/color]

TextEditor ist in MainWindow.h und MainWindow.cpp deklariert und definiert:

Code: Alles auswählen

...
    TextEditor = new QTextEdit(this);
    TextEditor->setText("Hier wird ein einfacher Editor entstehen.\n\n Zu Beginn wird es nur einen einfachen Dateibetrachter geben.");
....
Weiter unten in der MainWindow.cpp versuche Ich testweise folgenden Aufruf:

Code: Alles auswählen

void MainWindow::Neu()
{
    FileEditor testAufruf;
    testAufruf.CreateNewEmptyFile();
}
MainWindow::Neu() ist Teil des Menüs Datei -> Neu.

Am liebsten hätte Ich die Widgets in einzelnen Headern definiert, damit das ganze sauberer ist. Qt wirft wirklich alles mit C++ über den Haufen. Furchtbar.

Habe endlich eine legale Kopie von "C++ GUI Programming with Qt4" gefunden. Leider habe Ich darin keine Antwort dazu gefunden. Oder Ich habe sie übersehen.

Vielen Dank für eure Zeit :)
Oliver
Zuletzt geändert von Toshan am 16. September 2014 01:13, insgesamt 5-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: [Fragen] Menü wird nicht angezeigt; Wie Zugriff auf Brow

Beitrag von Christian81 »

Ich verstehe den Code nicht wirklich aber Klassen sind dafür da, die Daten zu kapseln. Von außen auf Member-Variablen zuzugreifen indem man sie public macht ist nicht unbedingt dass, was man sich unter C++ vorstellt ... Was genau willst Du machen und was genau geht nicht. Ein minimales, vor allem kompilierbares Beispiel würden hier definitiv helfen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Toshan
Beiträge: 2
Registriert: 8. September 2014 11:44
Wohnort: Hannover

Re: [Fragen] Menü wird nicht angezeigt; Wie Zugriff auf Brow

Beitrag von Toshan »

Habe jetzt alles was mit menuBar() zu tun hat, wieder in die MainWindow.cpp verschoben.

Leider erhalte Ich weiterhin keinen Zugriff auf die Widgets in MainWindow.cpp, wenn Ich z.B. versuche, mit "TextEditor" (QTextEdit) aus FileEditor.cpp heraus zu arbeiten.

Ich weiß das Ich irgendwas übersehe. Die Frage ist nur was.
Ach Ja, die Code Schnipsel im 1ten Post habe Ich gekürzt und angepasst.

Danke
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: [Frage] Wie kann Ich auf Widgets in MainWindow zugreifen

Beitrag von Christian81 »

Was meinst Du damit:
"versuche, mit "TextEditor" (QTextEdit) aus FileEditor.cpp "
nochmal: minimale Codebeispiele sind wichtig - ansonsten können wir nur raten.
Des Weiteren empfehle ich hier ein C++ - Grundlagenbuch in der der Sinn und Aufbau von Klassen beschrieben ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

Re: [Frage] Wie kann Ich auf Widgets in MainWindow zugreifen

Beitrag von sowas »

am einfachsten wäre, ein Einführungsbuch zu Qt besorgen, z.B. "C++ GUI Programming with Qt 4" von
Jasmin Blanchette, man kann es auch runterladen. Dort wird alles genau erklärt.
Das Buch gibt es auf auf deutsch.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: [Frage] Wie kann Ich auf Widgets in MainWindow zugreifen

Beitrag von MichaelS »

Folgender Mini Code funktioniert jedenfalls problemlos:

Code: Alles auswählen

void FileEditor::CreateNewEmptyFile()
{
QMessageBox *testAufruf = new QMessageBox;
    testAufruf->setText("FileEditor::CreateNewEmptyFile() wurde erfolgreich aufgerufen");
    testAufruf->show();
}
Mit diesem Code erzeugst Du dann auch mal fröhlich einen Memory-Leak, weil Du den mit new reservierten Speicher nicht wieder freigibst. Das könntest Du vermeiden, in dem Du QMessageBox im Konstruktor einen Parent übergibst oder in dem Du Dir das ganze Geraffel sparst und gleich eine der statischen Funktionen von QMessageBox verwendest:

Code: Alles auswählen

QMessageBox::information(this, "Irgendein Titel","FileEditor::CreateNewEmptyFile() wurde erfolgreich aufgerufen"); 
Warum macht Qt das ganze nur so unnötig kompliziert. Mit Standard C++ kann Ich jederzeit auf Inhalte von anderen Klassen etc. zugreifen.
Qt ist C++ und macht nichts unnötig kompliziert. Wenn Du aber alle Inhalte einer Klasse public deklarierst, um jederzeit von außen daraufzugreifen zu können, dann hast Du den Sinn von Klassen nicht verstanden.
Antworten