Hallo Forum,
ich habe neben meinem mainwindow.ui Formular auch noch ein mywidget.ui Formular in dem ich unter anderen einen QLineEdit names myline habe.
Im mainwindow rufe ich die Funktion auf mit new mywidget und mywidget.show() das zweite Fenster anzeigt. Soweit funktioniert es, nur wie kann ich nun aus dem mainwindow auf das myline zugreifen? Also was mir nicht so ganz klar ist, wie sind die Objekte angeordnet? Auf die Elemente im mainwindow greife ich ja mit ui->pushbutton zu, wie komme ich an die Elemente des zweiten Fensters?
Zugriff auf Elemente
Code: Alles auswählen
class mywidget : public QWidget
{
Q_OBJECT
public:
mywidget(QWidget *parent = 0);
private slots:
private:
Ui::widged ui;
};
Dann mach deine MainWindow Klasse singleton:
Beispiel:
Body
Header
kannst dir dann mit TestKlasse::getInstance()->getBlaEdit(); nen pointer auf das lineedit holen.
Beispiel:
Body
Code: Alles auswählen
TestKlasse::TestKlasse()
{
if ( Server::instance == NULL )
{
Server::instance = this;
}
else
{
throw new std::runtime_error ( "Double initialisation" );
}
}
QLineEdit* TestKlasse::getBlaEdit()
{
return this->blaEdit;
}
TestKlasse::~TestKlasse()
{
this->instance = NULL;
}
TestKlasse* TestKlasse::getInstance ( void )
{
return instance;
}
TestKlasse* TestKlasse::instance = NULL;
Code: Alles auswählen
#ifndef TESTKLASSE_H
#define TESTKLASSE_H
#include <QMainWindow>
#include <QLineEdit>
class TestKlasse: public QMainWindow
{
Q_OBJECT
public:
TestKlasse();
static TestKlasse* getInstance ( void );
~Server();
QLineEdit * getBlaEdit();
private:
static TestKlasse* instance;
void sendData ( QTcpSocket* socket, RonsPacket* pack );
QLineEdit *blaEdit;
};
#endif
Warum denn Singleton?!? Dieses Pattern ist hier absolut unangebracht! Singleton kommt einer globalen Variable gleich, und die sollte man meiden wie die Pest, gibt bei unachtsamer Verwendung einfach zu viele Probleme, in die man laufen kann.
Der Hintergrund der Ausgangsfrage erschließt sich mir auch nicht ganz - was genau ist dein Problem?
1) Wie komme ich an das mywidget ran?
2) Wie komme ich an das myline im mywidget ran?
Lösung:
1) Mache das mywidget-Objekt, welches du in jener Funktion erstellst, zu einem Member von mainwindow. Hast du mehrere mywidgets, dann speicher in mainwindow eine QListy<mywidget*>, und leg die erstellten Objekte da rein. So hast du jederzeit das Objekt zur Verfügung. Alternativ gibt es in QObject auch noch die "findChild"-Methode.
2) Das wäre die simplere Frage: Einfach eine Funktion in mywidget anbieten, die die Funktion zurückgibt.
Der Hintergrund der Ausgangsfrage erschließt sich mir auch nicht ganz - was genau ist dein Problem?
1) Wie komme ich an das mywidget ran?
2) Wie komme ich an das myline im mywidget ran?
Lösung:
1) Mache das mywidget-Objekt, welches du in jener Funktion erstellst, zu einem Member von mainwindow. Hast du mehrere mywidgets, dann speicher in mainwindow eine QListy<mywidget*>, und leg die erstellten Objekte da rein. So hast du jederzeit das Objekt zur Verfügung. Alternativ gibt es in QObject auch noch die "findChild"-Methode.
2) Das wäre die simplere Frage: Einfach eine Funktion in mywidget anbieten, die die Funktion zurückgibt.