[Gelöst] Globale Funktion und ui elemnte in Funktionen

Alles rund um die Programmierung mit Qt
Antworten
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

[Gelöst] Globale Funktion und ui elemnte in Funktionen

Beitrag von ycronoy »

Hallo Leute,

Ich habe wieder mal eine Frage an euch experten:

1. Ist es möglich Globale Funktionen zu schreiben, die so wie Globale Variablen einfach in jeder andren Klasse genutzt werden können?
Gibt es da was ganz besonders zu beachten und ist es evtl. besser die Funktionen noch mal in jeder Klasse neu zuschreiben?

2. Wenn ich an Objekt orientierte Programmieren denke und dabei GUI Elemente nutze habe ich ein kleines Problem.
Ich habe eine etwas größere Funktion geschrieben in der abwechselnd unterschiedliche GUI Elemente genutzt und verändert werden.
Aktuell frage ich mit if ab ob das Element verändert wird oder doch das else Element. das finde ich sehr un-hübsch.

Zur frag ist es möglich so was wie "QString ui_element = ui->qlineedit"? Dann könnte man beim auf ruf der Funktion das richtige Element immer übergeben.

Ich bitte wie immer die steine auf dem Boden zu lassen..... :lol:

MfG,
ycronoy
Zuletzt geändert von ycronoy am 15. April 2013 20:40, insgesamt 1-mal geändert.
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von veeman »

1. Alle Funktionen sind global, solange diese nicht als static definiert sind und in dem header deklariert sind.
2. Ja das ist möglich -> Stichwort "call by reference".
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von ycronoy »

Hi veeman,

Bei "call by reference" finde ich leider nur Informationen die sich auf Variablen beziehen.
Leider finde ich nicht was sich auf UI Elemente sich bezieht.

Kannst du bitte evtl. ein beispiel machen?

Ich möchte zbs. so was machen können:

test = ui->meh_wert;
test->clear();

Damit möchte ich eine Funktion wieder verwertbar machen.

MfG,
ycronoy
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von veeman »

Ui-elemente sind nichts anderes als Variablen.

Code: Alles auswählen

myFunction(QWidget *item)
{
....
}
...
QWidget *element = ui->tableWidget;
myFunction(element);
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von ycronoy »

Moin veeman,

Erstmal ein Herzlichen dank für deine Hilfe so weit. Ich Glaube ich bin fasst da wo ich hin wollte. :D
Leider habe ich noch eine letzte Blockade.

Kann es sein das mann nicht mehr ->additem oder ->text oder ->settext machen kann?
Gibt es eine Umgehungslösung? Ich habe das Gefühl wenn ich die ui Elemente als variable nutzte das ich nur das machen kann was ich mit jedem item könnte.

Mache ich evtl. noch irgendwas falsch?

So Sieht es bei mir aus:

Code: Alles auswählen

test.h
...
void test_test123(QWidget *test_item_123);
...

Code: Alles auswählen

test.cpp
...
void Main_Editor::test_test(QWidget *test_item_123)
{
      *test_item_123->settext("Hallo Welt"); // das geht leider wieso auch immer nicht! Das Widget könnte es aber ....
}
...

 test_test(ui->lineEdit);
...
Was mache ich nur falsch?

MfG,
ycronoy
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von veeman »

Du definierst als Parameter ein Pointer und wenn du diesen mit dem "pointer"-Operator anspirchst brauchst du das element nicht mehr zu dereferenzieren.

Code: Alles auswählen

void Main_Editor::test_test(QLineEdit *test_item_123)
{
      test_item_123->setText ("Hallo Welt");
      // oder eben 
      (*test_item_123).setText ("Hallo Welt");
}
<- Beachte das du nur die Eigenschaften von QWidget verwenden kannst, ist zb. das Ursprüngliche Object ein QLineEdit und du möchtest die Funktion setText verwenden, dann musst du auch den Parametertyp als QLineEdit definieren.

Wenn nicht von Anfang an klar feststeht was für ein Typ übergeben werden soll kann man auch die Elternklasse als Parameter (zB. QWidget) verwenden und anschliessend einen Object-cast zu versuchen:

Code: Alles auswählen

void Main_Editor::test_test(QWidget*test_item_123)
{
      QLineEdit *item = qobject_cast<QLineEdit*>(test_item_123);
      if(item) 
           item ->setText ("Hallo Welt");
}
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Re: Globale Funktion und ui elemnte in Funktionen

Beitrag von ycronoy »

Muuuhhhaarrraarraaahaa :twisted:

Es geht, und ach noch besser als gedacht. :D :D :D :D :D :D
Vielen dank veeman.

Ich muss leider jedes Element(Widget?) in die Headerdatei Includiren aber es funktioniert jetzt. Juhu..... Jetzt kann man sogar kleine richtige Anwendungen schreiben....

MfG,
ycronoy
Antworten