Seite 1 von 1
[gelöst] TabWidget und dessen Children
Verfasst: 12. Juni 2006 23:11
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!
Re: TabWidget und dessen Children
Verfasst: 13. Juni 2006 00:49
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);
}
}
Re: TabWidget und dessen Children
Verfasst: 13. Juni 2006 07:26
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.
Re: TabWidget und dessen Children
Verfasst: 13. Juni 2006 07:36
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
Re: TabWidget und dessen Children
Verfasst: 13. Juni 2006 07:41
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.
Re: TabWidget und dessen Children
Verfasst: 13. Juni 2006 07:54
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
Verfasst: 13. Juni 2006 08:06
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?
Verfasst: 13. Juni 2006 08:16
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
Verfasst: 13. Juni 2006 08:17
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
Verfasst: 13. Juni 2006 08:33
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.
Verfasst: 13. Juni 2006 14:20
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 *>();