Hallo, Programmiersprache ist C++ Visual Studio mit QT Plugin folgende Anwendung habe : //Header File class MainWindow: public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0); ~MainWindow(); QString getKundenLineEdit() const; QString getNameLineEdit() const; // dazu die setter ...... ...... }; Cpp File MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { ui.setupUi(this); .... } QString MainWindow::getKundenLineEdit() const { return ui.KundenLineEdit->text(); } QString MainWindow::getNameLineEdit() const { return ui.NameLineEdit->text(); } Dazu habe ich folgende Klasse: class A { public: bool checkKundenDaten(); }; Meine Frage ist : Ich möchte die beide Funktionen der Klasse MainWindow "QString getKundenLineEdit() const und QString getNameLineEdit() const " in der Klasse A Bzw. in der "checkKundenDaten()" Funktionen aufrufen. Ich weiss es nicht wie mache ich das (es ist echt peinlich), aber ich kriege das nicht hin.
Irgendwo wird ja nun eine Instanz von Mainwindow angelegt. Du wirst schon rausfinden, wo, so viele Files hat das Projekt ja noch nicht. Über die Instanz kannst du dann auf die globale Methoden der Klasse zugreifen. Oliver
Hi! Visual Studio ist keine Programmiersprache. Oliver schrieb: > Irgendwo wird ja nun eine Instanz von Mainwindow angelegt. Du wirst > schon rausfinden, wo, so viele Files hat das Projekt ja noch nicht. Über > die Instanz kannst du dann auf die globale Methoden der Klasse > zugreifen. Hä? Welche globalen Methoden? Und wie soll man an die Instanz kommen? Die Frage lautet er andersrum: Wo legst du denn eine Instanz von A an? An dieser Stelle musst du A erklären, wie es an die Daten kommt, die es braucht. Die Funktion in A klingt sowieso so, als ob die nicht in eine extra-Klasse gehört. Diese deutsch-englischen Methodennamen tun übrigens sehr weh :-( Es gibt QApplication::instance()->activeWindow(), aber mach' das nicht, das ist der falsche Pattern für diesen Zweck.
:
Bearbeitet durch User
Sven B. schrieb: > Hä? Welche globalen Methoden? Die, nach denen der TO gefragt hat. Sven B. schrieb: > Und wie soll man an die Instanz kommen? Mit etwas QT-Kenntnis findet man das raus. Der TO wird es auch rausfinden. Oliver
Oliver schrieb: > Sven B. schrieb: >> Hä? Welche globalen Methoden? > Die, nach denen der TO gefragt hat. Was soll denn eine "globale Methode" überhaupt sein? Sowas gibt es gar nicht. Meinst du static? Die Methoden, die der TO aufrufen will, sind nicht static und wenn es so wäre bräuchte man auch keine Instanz der Klasse um sie aufzurufen. Also: Hä? > Sven B. schrieb: >> Und wie soll man an die Instanz kommen? > Mit etwas QT-Kenntnis findet man das raus. Der TO wird es auch > rausfinden. Mit etwas Qt-Kenntnis weiß man, dass das Toolkit Qt heißt und nicht QT. Gruß, Sven
Wenn die Klasse Mainwindow instanziere:
1 | #include "mainwindow.h" |
2 | class A |
3 | {
|
4 | public:
|
5 | bool checkKundenDaten(); |
6 | |
7 | private:
|
8 | MainWindow mainwindow; // es lässt sich nicht instanzieren |
9 | // bei diesem Instanzierung bekomme ich folgende Fehlermeldung
|
10 | //error C2146: syntax error : missing ';' before identifier 'mainwindow'
|
11 | };
|
12 | |
13 | |
14 | |
15 | bool A ::checkKundenDaten() |
16 | {
|
17 | bool returnValue; |
18 | ...
|
19 | //
|
20 | mainwindow.getKundenLineEdit() |
21 | ...
|
22 | |
23 | return returnValue; |
24 | }
|
Problem ist aufgehoben, ich habe eine circulare Anhängigkeit und deswegen könnte es nicht kopiliert werden also von der HeaderFile "mainwindow.h" folgende löschen: "A.h" :-)
In dem Code instanziierst du nirgends A. Wenn du unbedingt das MainWindow aus A raus haben willst, speichere einen Pointer darauf (MainWindow* mainwindow), nicht die Instanz selber, das geht schief. Und übergib' diesen Pointer an den Konstruktur von A. Etwa so:
1 | int main() { |
2 | QApplication app(...); |
3 | MainWindow w; |
4 | A a(&w); |
5 | w.show(); |
6 | return app.exec(); |
7 | }
|
Oder sowas. Ich frage mich aber immer noch was genau die Funktion der mystischen Klasse A sein soll, denn das, was da steht (Werte in einem Textfeld auf Gültigkeit überprüfen), wäre in MainWindow selbst besser aufgehoben. Oh, ja, und in deinem Header fehlt auch das #ifdef-blablubb.
:
Bearbeitet durch User
Eine weitere übliche Lösung für Probleme dieser Art ist sowas:
1 | QObject::connect(window.ui->lineEdit, &QLineEdit::textChanged, |
2 | &a, &A::myFunction) |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.