Seite 1 von 1

scheiss signal slot

Verfasst: 4. Mai 2007 17:16
von mollitz
dieses system regt mich eig. voll auf.
hat jemand lust mir die vorteile davon zu nennen, damit ich nicht ganz so deprimiert bin =(.
mein problem:
ich will mit einem klick auf einen button, eine funktion aufrufen.
und zwar soll diese funktion nicht teil einer klasse sein!

Verfasst: 4. Mai 2007 17:42
von upsala
Was willst du dann für Funktionen aufrufen? Wir sprechen hier von C++ und nicht von C. Außerdem läßt deine Wortwahl zu wünschen übrig. Die Anfänger Tutorials hast du selbstverständlich schon durchgearbeitet, oder?

Verfasst: 4. Mai 2007 18:01
von mollitz
Ok, sorry!
Des Teil hat mich bloss ein bisschen gestresst.
Ich weiss, das wir von C++ sprechen.
Ich will einfach eine Funktion aufrufen die ich irgendwo deklariert habe. z.B.
so:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>
int funktion(int i)
{
}

int main( ... )
{
QApplication app(argc, argv);
b1 = new QPushButton();
QObject::connect(b1,SIGNAL(clicked),k.A.,funktion);

Verfasst: 4. Mai 2007 18:06
von caligano
Warum willst du denn keine Klasse deklarieren?
Ohne eine Klasse gehen keine connects mit selbsterstellten Funktionen, sondern nur soetwas (u.ä.):

Code: Alles auswählen

#include <QApplication>
 #include <QFont>
 #include <QPushButton>

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QPushButton quit("Quit");
     quit.resize(75, 30);
     quit.setFont(QFont("Times", 18, QFont::Bold));

     QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

     quit.show();
     return app.exec();
 }
Vielleicht hilft dir das Qt-Tutorial weiter:
--> http://doc.trolltech.com/4.2/tutorial-t2.html

Verfasst: 4. Mai 2007 18:14
von mollitz
hmm schade!
ist es möglich(, empfehlsam), eine ableitung der klasse qapplication zu machen und da sachen reinzupacken, die ganz global das ganze programm betreffen oder sollte man da eher die finger von lassen=??

Verfasst: 4. Mai 2007 18:38
von franzf
In einem "normalen" Projekt läuft das meist so ab:
Du erstellst dir Klassen, welche bestimmte Objekte verwalten oder anzeigen. Irgendwo muss dann dieses ganze "Kuddelmuddel" zusammenlaufen. Dafür wird meist QMainWindow für eigene Zwecke abgeleitet. In dieser Klasse kannst du dann auch, wie du meinst, Programmglobale Funktionen definieren (natürlich als Methoden deiner Klasse!). Nun kannst du jedes Objekt/Widget, welches du für dein QMainWindow sichtbar hältst, mit diesen "Funktionen" verbinden.

Ich hoffe das verschafft ein bisschen mehr Klarheit.

Grüße
Franz

Verfasst: 4. Mai 2007 18:45
von mollitz
alles klar und die von qmainwindow abgeleitete klasse enthält dann static funktionen und die kann ich dann überall aufrufen !?

Verfasst: 4. Mai 2007 19:46
von Volker
Ich weiss zwar nicht warum du unbedingt Funktionen brauchst, die Du von "überall" aufrufen kannst, aber vielleicht hilft dir das Singleton Design Pattern bei der Umsetzung deines Problems. Dann brauchst du nur eine statische Funktion.

Verfasst: 7. Mai 2007 10:46
von C_R
Sorry dass ich hier reinplatz, aber meine Frage passt ganz gut hier hin.

Ich habe ein recht umfangreiches Programm in C vorliegen und habe die Aufgabe, eine GUI drüberzulegen (Qt). Wie geh ich am besten vor? Den C Code nach C++ umschreiben oder ist es auch möglich die Funktionen so aufzurufen (wie mollitz hier ebenfalls vorhat)? Denn das umzuschreiben kostet nochmal gut Zeit.

regards

Verfasst: 7. Mai 2007 10:52
von Volker
Du kannst ja die Oberfläche mit C++ schreiben und in den Klassen Methoden die C Funktionen entsprechend aufrufen.... seh da kein Problem.

Verfasst: 7. Mai 2007 11:06
von C_R
Ja, so hab ich mir das auch vorgestellt, aber bin noch neu in der bunten Welt von C/C++. Da kann man ja nie Wissen.

Danke dir.

Verfasst: 7. Mai 2007 14:37
von mollitz
Du kannst ja die Oberfläche mit C++ schreiben und in den Klassen Methoden die C Funktionen entsprechend aufrufen.... seh da kein Problem.
ich dachte das geht nicht!
ich dachte man muss die "funktionen" als statische member funktionen der mainwindow klasse deklarieren, dass man sie von überall aufrufen kann.

Verfasst: 7. Mai 2007 14:41
von Volker
Nein, wenn du eine C-Funktion hast, dann kannst du sie von überall aufrufen. Voraussetzung ist nur, dass der Compiler sie findet und die zugehörige Implementierung vom Linker gefunden werden kann.
Für ersteres reicht ein #include der Datei die die Funktionsdeklaration enthält für letzteres muss die entsprechende Bibliothek oder übersetzte C-Datei beim Linken mitangegeben werden.

Verfasst: 7. Mai 2007 18:21
von franzf
Volker hat geschrieben:Für ersteres reicht ein #include der Datei die die Funktionsdeklaration enthält [...]
Und bitte gleich an das extern "C" denken, da sonst der C++-Compiler Ärger macht :)