[gelöst] TabWidget und dessen Children

Alles rund um die Programmierung mit Qt
Antworten
ttg
Beiträge: 3
Registriert: 12. Juni 2006 22:57

[gelöst] TabWidget und dessen Children

Beitrag von ttg »

Ich brauche da mal einen Rat:

Ich habe ein Tabwidget, in dem weitere Seiten dynamisch hinzugefügt und entfernt werden. Auf jeder TabPage ist ein QTextEdit. So weit, so gut.

Jetzt will ich z.B. in den aktuellen Editor PlainText einfügen - etwa so

myTabWidget->currentWidget()->myEditor->insertPlainText("Hallo Welt")

Mein Problem ist, dass ich nicht an die Funktionen des aktiven QTextEdit komme, sondern nur die QWidget Funktionen nutzen kann (größe ändern geht zum Beispiel). Wie komme ich an die children des Tabwidget dran? Mir gehen irgendwie die IDeen aus :(

Danke für jeden Tipp!
Zuletzt geändert von ttg am 13. Juni 2006 14:28, insgesamt 1-mal geändert.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: TabWidget und dessen Children

Beitrag von patrik08 »

ttg hat geschrieben:Ich brauche da mal einen Rat:
ill ich z.B. in den aktuellen Editor PlainText einfügen - etwa so
myTabWidget->currentWidget()->myEditor->insertPlainText("Hallo Welt")
Danke für jeden Tipp!

qwidget = note
carta = Qicon..
myTabWidget->addItem(note,carta,tr("text"));

myTabWidget->setCurrentIndex(0); auf position 1 setzen fangt immer bei NULL an....

myEditor->insertPlainText("Hallo Welt")
separat ....

oder mit dem find objekt name typ alle auffuellen... nach name....
http://www.qtforum.de/forum/viewtopic.php?t=2192


entfernen so....

Code: Alles auswählen

/* remove tabulator from class */
void Shop_Main::RemoveTabs()
{
     int opentab = myTabWidget->count();
     for (int i=0;i<opentab+1 ;i++){
      myTabWidget->removeTab(i);
    } 
}
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: TabWidget und dessen Children

Beitrag von macman »

ttg hat geschrieben:Wie komme ich an die children des Tabwidget dran?
Da gibt es viele Möglichkeiten. Du könntest dir mit children() eine Liste aller Children holen oder mit findChild<QLineEdit*>("lineEdit1") ein bestimmtes LineEdit oder Du packst Dir jedes LineEdit gleich in eine Liste QList<QLineEdit*>, wenn Du oft und schnell Zugriff darauf brauchst.
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Re: TabWidget und dessen Children

Beitrag von DarkWotan »

ttg hat geschrieben:Wie komme ich an die children des Tabwidget dran?
Also wenn ich das richtig verstanden habe, hast du lediglich ein Problem damit, auf die speziellen Methoden von QTextEdit zuzugreifen, da currentWidget() lediglich einen Zeiger auf ein QWidget liefert.
Nunja ... guck dir mal die Klassenhierarchie an.
QTextEdit ist eine indirekte Unterklasse von QWidget und deshalb lässt sich der Rückgabewert von currentWidget() auch casten.

Code: Alles auswählen

QTextEdit* curTextEd = dynamic_cast<QTextEdit*>(myTabWidget->currentWidget());

if (curTextEd != NULL)
{
  //Methodenaufrufe
}
MfG, Cedric
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: TabWidget und dessen Children

Beitrag von macman »

DarkWotan hat geschrieben:

Code: Alles auswählen

QTextEdit* curTextEd = dynamic_cast<QTextEdit*>(myTabWidget->currentWidget());
Eijeijei, guck doch bitte vorher in die Doku, bevor Du sowas von dir gibst.
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Re: TabWidget und dessen Children

Beitrag von DarkWotan »

macman hat geschrieben:
DarkWotan hat geschrieben:

Code: Alles auswählen

QTextEdit* curTextEd = dynamic_cast<QTextEdit*>(myTabWidget->currentWidget());
Eijeijei, guck doch bitte vorher in die Doku, bevor Du sowas von dir gibst.
Sei doch bitte etwas präziser, mir fällt gerade nicht auf, was daran verkehrt sein soll.

MfG, Cedric
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

QWidget * QTabWidget::currentWidget () const
Returns a pointer to the page currently being displayed by the tab dialog.
currentWidget() liefert also ein Widget, welches wiederum mehrere Widgets enthält. Es wäre natürlich möglich mit insertTab gleich ein QLineEdit als Tab hinzuzufügen, dann würde deine Version gehen, aber wer macht das schon?
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag von DarkWotan »

macman hat geschrieben:currentWidget() liefert also ein Widget, welches wiederum mehrere Widgets enthält. Es wäre natürlich möglich mit insertTab gleich ein QLineEdit als Tab hinzuzufügen, dann würde deine Version gehen, aber wer macht das schon?
Spielt das eine Rolle, wer das macht? Wenn du meine Erklärung
DarkWotan hat geschrieben:Also wenn ich das richtig verstanden habe
gelesen und verstanden hättest, hättest du dir auch den Kommentar von wegen Blick in die Doku sparen können.

MfG, Cedric
Alci
Beiträge: 70
Registriert: 24. März 2006 23:34

Beitrag von Alci »

Hallo,

schon so früh am Start? Nun aber zum Problem:
Wenn du bei insertItem gleich eine QTextEdit hinzufügst (geht leider aus deiner Beschreibung nicht hervor), dann nimmst du am besten die Methode von DarkWotan. Wenn nicht, dann musst du das etwas anders machen:

Code: Alles auswählen

QWidget* pCurrentWidget = myTabWidget->currentWidget();
const QObjectList& ChildWidgets = pCurrentWidget->children();
QTextEdit* pTextEdit dynamic_cast<QTextEdit*> = ChildWidgets[0]; //Den Index musst du selber kennen
//Wenn QTextEdit z. B. das erste Widget ist, was du hinzufügst, 
//dann ist der Index 0
MfG, Alci.

Aktuelle Projekte:
FModPlayer: Audio-Player auf Basis von FModEx
Epp.org: C++-IDE mit MinGW-Compiler

Entwickelt wird unter anderem mit Qt 4.1.4
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

DarkWotan hat geschrieben:Spielt das eine Rolle, wer das macht? Wenn du meine Erklärung
DarkWotan hat geschrieben:Also wenn ich das richtig verstanden habe
gelesen und verstanden hättest, hättest du dir auch den Kommentar von wegen Blick in die Doku sparen können.
Schlecht geschlafen oder was? :-)
Wenn ich das richtig verstanden habe, hast Du noch nie ein QTabWidget mit dynamischen Tabs benutzt. Sonst kommt man nicht auf die Idee das so zu lösen wie Du es vorgeschlagen hast.

Wie auch immer, der OP sollte jetzt genügend Möglichkeiten gezeigt bekommen haben.
ttg
Beiträge: 3
Registriert: 12. Juni 2006 22:57

Beitrag von ttg »

macman hat geschrieben: Wie auch immer, der OP sollte jetzt genügend Möglichkeiten gezeigt bekommen haben.
Ja, danke!
findChildren ist ab sofort mein Freund :)

Code: Alles auswählen

QList<QTextEdit *> edl = tabWidget->currentWidget()->findChildren<QTextEdit *>();
Antworten