Seite 1 von 1
[gelöst] widgetobjekt aus anderen widget aus aufrufen
Verfasst: 15. Mai 2007 21:12
von Linuxguru
hallo allerseits
mein problem ist folgendes. ich habe in zwei klassen, welche von qwidget abgeleitet sind.
in klasse 1 befindet sich ein textedit. wie kann ich denn auf die eigenschaften des textedits von klasse 2 heraus reagieren.
ich habe die klasse1.h in der klasse2.h included.
hier noch etwas code
klasse1.cpp
Code: Alles auswählen
#include <QTextEdit>
Klasse1::Klasse1(QWidget *parent)
: QWidget(parent)
{
QTextEdit *edit = new QTextEdit(this);
edit->setGeometry(10,10,400,300);
}
klasse2.cpp
Code: Alles auswählen
#include <QTextEdit>
Klasse2::Klasse2(QWidget *parent)
: QWidget(parent)
{
edit->setPointFontSize(9);
}
da bekomme ich natürlich ein fehler, weil edit in klasse 2 nicht deklariert ist.
danke
Verfasst: 16. Mai 2007 07:15
von macman
Irgendwer wird ja die beiden Klassen managen und der holt den Pointer des Textedits aus Klasse1 und teilt ihn Klasse2 mit, damit die Zugriff darauf hat.
Verfasst: 16. Mai 2007 12:04
von UmmonTL
Genau, Klasse2 braucht irgendeine Art von Referenz auf die Instanz von Klasse1 bzw. das Textedit von dieser. Diese würde wahrscheinlich im Konstruktor mit übergeben also z.B.
Code: Alles auswählen
#include <QTextEdit>
Klasse2::Klasse2(QWidget *parent, Klasse1 *kl1)
: QWidget(parent)
{
kl1->getEdit()->setPointFontSize(9);
}
Bei dieser Variante bräuchte Klasse1 noch eine public Methode getEdit() die einen Pointer auf das Textedit liefert. Denkbar wäre auch wie macman sagte, dass Klasse2 direkt den Pointer auf das Textedit im Konstruktor übergeben bekommt und getEdit() vom Manager der beiden benützt wird.
Verfasst: 16. Mai 2007 21:51
von Linuxguru
irgendwie schnackel ich das nicht
ich hab nun klasse 1 wo mein edit(qtextedit) erzeugt wird.
Code: Alles auswählen
#include <QTextEdit>
Klasse1::Klasse1(QWidget *parent)
: QWidget(parent)
{
edit = new QTextEdit(this);
edit->setGeometry(10,10,400,300);
}
die header dazu sieht dann so aus
Code: Alles auswählen
#ifndef KLASSE1_H
#define KLASSE1_H
#include <QTextEdit>
class Klasse1: public QWidget
{
Q_OBJECT
public:
Klasse1(QWidget *parent = 0);
QTextEdit *edit;
public slots:
private:
};
#endif
so die cpp von klasse 2 wäre dann diese
Code: Alles auswählen
#include <QTextEdit>
Klasse2::Klasse2(QWidget *parent, Klasse1 *kl1)
: QWidget(parent)
{
kl1->edit()->setPointFontSize(9);
}
und die dazugehörige header wäre die
Code: Alles auswählen
#ifndef KLASSE2_H
#define KLASSE2_H
#include <QTextEdit>
class KLASSE2: public QWidget
{
Q_OBJECT
public:
Klasse1(QWidget *parent = 0, Klasse1 *kl1));
QTextEdit *edit;
public slots:
private:
};
#endif
klasse 2 kann ja in dem moment mit klasse 1 nix anfangen. wo liegt denn noch mein fehler
danke für die hilfe!!!
Verfasst: 16. Mai 2007 22:40
von upsala
Was willst du eigentlich?
Fertigen Code? Gibts nicht!
Tips wie du dein Problem zu lösen ist? Dann lies die Antworten, die dir gegeben wurden!
Verfasst: 17. Mai 2007 13:52
von Linuxguru
hallo upsala,
nein nein, ich möchte keine feritge lösung. ich hab da nur ein verständnisproblem. hänge nun schon 3 tage dran irgendwo im netz beispiele zu finden.
wenn ich klasse 1 includiert habe, kann ich mit
Code: Alles auswählen
Klasse1 *testklasse = new Klasse1()
testklasse->edit->setText("test");
ein widget erstellen und auf das objekt edit zugreifen, allerdings existiert klasse 1 ja schon, also kann ich da auch keine neue erstellen.
windows verursacht dadurch ein problem.
ein beispiel oder link dazu wäre hilfreich, um das ganze besser zu verstehen.
danke
Verfasst: 17. Mai 2007 14:27
von upsala
Einer von vielen:
C++-Grundlagen
Verfasst: 18. Mai 2007 00:37
von Linuxguru
hab es hinbekommen.
danke!!! @UmmonTL und macman