Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 24 von 24

Thema: QT-Programmierung

  1. #16
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von ZockerM
    Wie kann ich denn verhindern, dass die Funktion slot_Ok() erstellt wird? Ich will da ja meine eigenen Befehle reinschreiben.
    kurzanleitung:
    Im Designer den Slot löschen.
    Dann von deiner im designer erzeugten klasse eine eigene ableiten, und in deren konstruktor den slot erzeugen ...

    verstanden?
    Bodo
    Systemadmistration UNIX

  2. #17
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von ZockerM

    Wegen der Sache mit der Klasse:
    Hm, die Klasse wird ja schon in der Datei maindlg.h erzeugt. Blöderweise wird die Funktion slot_Ok() in der Datei maindlg.cpp automatisch erzeugt..
    Darum leitest du ja auch eine Klasse davon ab, und implementierst dort die von dir gewünschte Funktionalität.

    (Wenn ich eine Dialog in Qt Designer mache ist der OK Button mit accep() verbunden, nicht mit slot_Ok(), könnte von der Qt Version abhängen)


    Egal

    Jeder slot ist automatisch virtual, d.h. du definierts ihn einfach im Header deiner abgeleiteten Klasse neu und implementierts ihn dort.

    Bei zusätzlichen Buttons machst du es so wie TheDodger es geschrieben hat.
    Du definierst einen slot im Header der abgeleiten Klasse, und machts dann ein connect im Constructor:

    Code:
    class MyDialog : protected MyDialogbase
    {
    //...
    
    protected slots:
        void slotApplyButton();
    };
    
    MyDialog::MyDialog()
    {
        connect(applyButton, SIGNAL(clicked()), this, SLOT(slotApplyButton()));
    }
    Ich hab mal gehört, dass der Designer von Qt3, falls du schon das verwendest, dir sogar ermöglich die slots gleich im Designer zu definieren.


    hth,
    _

  3. #18
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa

    Ich hab mal gehört, dass der Designer von Qt3, falls du schon das verwendest, dir sogar ermöglich die slots gleich im Designer zu definieren.
    Tut er (ich arbeite in der Firma hauptsächlich mit QT3 und priv. ab-und-zu mal).
    Allerdings finde ich es so gesehen nicht sehr schön.
    Ich erstelle meine Slots lieber per Hand und weiß, wo sie stehen, und was für connections sie haben. Wenn du das im Designer handelst geht dir ein großes Maß an dieser Kontrolle verloren ... IMHO
    Bodo
    Systemadmistration UNIX

  4. #19
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    [B]
    Ich erstelle meine Slots lieber per Hand und weiß, wo sie stehen, und was für connections sie haben. Wenn du das im Designer handelst geht dir ein großes Maß an dieser Kontrolle verloren
    [/B


    Find ich auch besser, hab es eigentlich nur erwähnt, um mit meinem Wissen zu protzen

    Ciao,
    _

  5. #20
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Bodo
    Systemadmistration UNIX

  6. #21
    Registrierter Benutzer
    Registriert seit
    10.11.2001
    Beiträge
    17
    Hi!

    Ich hätte schon ein bisschen früher geantwortet, aber diese blöde Schule...
    Vielen Dank für eure Antworten...auch wenn ich im Moment ein bisschen verwirrt bin...

    Darum leitest du ja auch eine Klasse davon ab, und implementierst dort die von dir gewünschte Funktionalität.
    Gut, ich habe eine Klasse von der vom QT-Designer erstellen Header-Datei erstellt....
    Diese Klasse heißt "test". Da definiere ich dann mit "public slots: virtual void slot_ok();" einen neuen Slot...So, und wie connecte ich den dann?

    Oder habe ich jetzt was falsch gemacht, oder falsch verstanden?

    Vielen Dank für eure Geduld.

    gruß ZockerM
    The worst day finswimming is better than the best day working.

  7. #22
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von ZockerM
    Hi!

    Ich hätte schon ein bisschen früher geantwortet, aber diese blöde Schule...
    Schule? hmmm, wie lang ist's her?


    Gut, ich habe eine Klasse von der vom QT-Designer erstellen Header-Datei erstellt....
    ???

    du sollst eine klasse ableiten, die von im Designer erstellten deinem ui-File kommt.

    nehmen wir an, du hast im Designer eine simples Fenster erstellt (Hello World? ), welches 'ui_hello' heißt.
    dann erstellst du dir eine klesse, die dann myHello genannt wird.

    Code:
    hello.cpp
    ---
    myHello::myHello( QWidget* parent,  const char* name, WFlags fl )
      : ui_hello( parent, name, fl )
    {
    damit hast du schon mal die funktionalität von ui_hello in deiner myHello -Klasse.

    und in den Konstruktor von myHello schreibst du dann die connections

    Code:
    hello.cpp
    ---
    connect( (QObject*)tbClose, SIGNAL( clicked() ), this, SLOT( slotClose() ) );
    Dabei achtest du drauf, das sowohl SIGNAL, als auch SLOT die selben Funktionsaufrufen haben!!!! ganz wichtig.
    falsch:
    Code:
    connect( (QObject*)action, SIGNAL( activated() ), this, SLOT( slotAction( QString ) ) );
    richtig:
    Code:
    connect( (QObject*)action, SIGNAL( activated( QString ) ), this, SLOT( slotAction( QString ) ) );
    Den Slot definierst du dann aber in 'hello.h'

    Code:
    hello.h
    ---
    class myHello:    public ui_hello
    {
            Q_OBJECT
    
            public:
                 myHello( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
                  ~myHello();
    
            public slots:
                    void slotClose();
    und slotClose() kannst du dann ganz normal auscoden ...

    Code:
    hello.cpp
    --- 
    void myHello::slotClose()
    {
      printf( "slotClose()\ntest" );
      this->close();
    }
    Oder habe ich jetzt was falsch gemacht, oder falsch verstanden?
    [/B][/QUOTE]
    entweder du, oder ich


    Vielen Dank für eure Geduld.
    no problem ...
    nur über die feiertage wird die reaktionszeit extrem lang
    man hat ja auch familie ...
    Bodo
    Systemadmistration UNIX

  8. #23
    Registrierter Benutzer
    Registriert seit
    10.11.2001
    Beiträge
    17
    Hi!

    Erstmal Danke für deine Antwort.

    Hm, nachdem ich etwa eine Stunde an deinem Beispiel rumprobiert habe, bin ich dann auf ein QT-Tutorial gestoßen, und dachte, dass müsstest du hinbekommen...
    Naja, dass mit dem Ableiten der Klasse und dem Erstellen der Funktion void testdlgimpl::slota() scheint geklappt zu haben, aber immer wenn ich das main Programm kompilieren will, bekomme ich:
    main.o: In function `main':
    main.o(.text+0x3f): undefined reference to `testdlgimpl::QPaintDevice virtual table'
    main.o(.text+0x46): undefined reference to `testdlgimpl virtual table'
    collect2: ld returned 1
    exit status make: *** [HelloWorld] Error 1
    Was ist denn das schon wieder?

    Ich werde heute mal im Buchladen nach einem QT-Buch schauen.

    Ich habe mal den Unsinn, den ich verzapft habe, angehängt.

    Wie immer, vielen Dank im Voraus.


    gruß ZockerM
    The worst day finswimming is better than the best day working.

  9. #24
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von ZockerM
    Hi!

    Erstmal Danke für deine Antwort.

    Hm, nachdem ich etwa eine Stunde an deinem Beispiel rumprobiert habe,
    eine stunde probiert?
    hilfe!!!!

    ich häng unten mal eine versrsion hin, die ich grad mal eben in 2-3minuten zusammengezimmert habe.
    Nicht getestet!
    Kann also sein, das sie erstmal beim kompilieren probleme macht ... klar, ich habe ja auch kaum includes eingebaut

    Ich werde heute mal im Buchladen nach einem QT-Buch schauen.
    Das von SuSE-Press ist zu empfehlen, auch wenn es derzeit nur die QT2.x abdeckt ..
    Ich habe mal den Unsinn, den ich verzapft habe, angehängt.
    no comment ...

    (mal gaaanz unten im footer ... jetzt ist es bei mir 20:58 ... Jungs, stellt bloß die Uhr richtig!
    Geändert von TheDodger (27-12-2001 um 19:54 Uhr)
    Bodo
    Systemadmistration UNIX

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •