scheiss signal slot

Alles rund um die Programmierung mit Qt
Antworten
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

scheiss signal slot

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag 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);
caligano
Beiträge: 126
Registriert: 19. August 2006 15:33

Beitrag 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
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag 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=??
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag von mollitz »

alles klar und die von qmainwindow abgeleitete klasse enthält dann static funktionen und die kann ich dann überall aufrufen !?
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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.
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag 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.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 :)
Antworten