Forum: PC-Programmierung QT + Visual studio


von Samuel (Gast)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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

von Sven B. (scummos)


Lesenswert?

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
von Oliver (Gast)


Lesenswert?

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

von Sven B. (scummos)


Lesenswert?

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

von Samuel (Gast)


Lesenswert?

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
}

von Samuel (Gast)


Lesenswert?

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"


:-)

von Sven B. (scummos)


Lesenswert?

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
von Sven B. (scummos)


Lesenswert?

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
Noch kein Account? Hier anmelden.