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.


Anmelden zum Antworten