grundlegende frage zum Operator &
-
#include <qapplication.h> #include <qlistbox.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); QListBox b; a.setMainWidget( &b ); for ( int i = 0; i < a.argc(); i++ ) // a.argc() == argc b.insertItem( a.argv()[i] ); // a.argv()[i] == argv[i] b.show(); return a.exec(); }
int main( int argc, char ** argv ) { KCmdLineArgs::init(argc, argv, "keagle", "keagle", "0.1"); KApplication app; eagle_gui window; app.setMainWidget(&window); QObject::connect( window.slider_timeadj, SIGNAL(sliderMoved(int) ), &window, SLOT(setzeZeit(int) ) ); //Counter QObject::connect( &(window.timer ), SIGNAL(timeout()), &window, SLOT(time_out() ) ); QObject::connect( window.pushButton_setTime, SIGNAL(clicked() ), &window, SLOT(startTimer() ) ); QObject::connect( window.pushButton_resetTime, SIGNAL(clicked() ), &window, SLOT(stopTimer() ) ); //...
also die frage ist sehr grundlegend. warum muss ich bei den verschiedenen objekten, wie z.b. window oder b ein &-operator vorhängen damit ich kein kompillierfehler bekomme?
//Edit Titel geändert
-
tipsy schrieb:
also die frage ist sehr grundlegend. warum muss ich bei den verschiedenen objekten, wie z.b. window oder b ein &-operator vorhängen damit ich kein kompillierfehler bekomme?
Das ist wirklich ziemlich grundlegend, Du solltest Dir vielleicht doch lieber erstmal ein gutes C++-Buch besorgen, bevor Du mit GUI-Programmierung anfängst.
Du schreibst deswegen &window, weil connect einen Zeiger auf den Receiver erwartet. Darum übergibst Du nicht das Objekt selbst, sondern nur dessen Adresse; ist durchaus gängige Praxis auch abseits von QT.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
da hast du schon recht,aber ich hab schon fast alles durch AUßER zeiger-arythmetik und ich dachte das kommt dann mit der übung.
woher weißt du eigentlich dass connect ein zeiger erwartet?
-
class MyWidget : public QWidget { public: MyWidget( QWidget *parent=0, const char *name=0 ); }; MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { setMinimumSize( 200, 120 ); setMaximumSize( 200, 120 ); QPushButton *quit = new QPushButton( "Quit", this, "quit" ); quit->setGeometry( 62, 40, 75, 30 ); quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); } :p
nur als bsp. hier wird kein zeiger übergeben?! mich verwirrt das nur, aber wenn das so einfach ein buch beantworten könnte würde ich nicht fragen.
-
tipsy schrieb:
nur als bsp. hier wird kein zeiger übergeben?!
Welchen Typ hat denn qApp?
-
moment das macht mich jettzt auch stutzug:
das war alles was da stand:/**************************************************************** ** ** Qt tutorial 4 ** ****************************************************************/ #include <qapplication.h> #include <qpushbutton.h> #include <qfont.h> class MyWidget : public QWidget { public: MyWidget( QWidget *parent=0, const char *name=0 ); }; MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { setMinimumSize( 200, 120 ); setMaximumSize( 200, 120 ); QPushButton *quit = new QPushButton( "Quit", this, "quit" ); quit->setGeometry( 62, 40, 75, 30 ); quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); } int main( int argc, char **argv ) { QApplication a( argc, argv ); MyWidget w; w.setGeometry( 100, 100, 200, 120 ); a.setMainWidget( &w ); w.show(); return a.exec(); }
ich wei gar nich wo qApp definiert ist!
weiter unten stand dann noch:
Because the MyWidget class doesn't know about the application object, it has to connect to Qt's pointer to it, qApp.
verwirrender als ich dachte
look here: http://doc.trolltech.com/3.3/tutorial1-04.html
also wenn ich bald mehr zeit habe wrde ich mich eingehender mit zeigern beschäftigen, aber verwirrend find ich es trotzdem. welchen sinn haben denn nun zeiger?
-
extern Q_EXPORT QApplication *qApp;
Wie du siehst, ist qApp ein Zeiger. Deine Vermutung, dass connect kein Zeiger übergeben wird, ist also unbegründet.
-
wo hast du das gefunden?
-
ho, ich glaub ich habs verstanden! wenn das teil also ein zeiger verlangt muss ich entweder direkt einen zeiger oder die adresse eines objektes/variablen übergeben.
using namespace std; void h(int* a) { cout<<"hallo"<< a<<endl; } int main(int argc, char *argv[]) { int b = 6; int *a = &b; h(a); //==h(&b); return EXIT_SUCCESS; }
-
tipsy schrieb:
wo hast du das gefunden?
Einfach deinem Link folgen und dann in qapplication.h nachschauen.
tipsy schrieb:
wenn das teil also ein zeiger verlangt muss ich entweder direkt einen zeiger oder die adresse eines objektes/variablen übergeben.
Yep.