[QT4] Programm erkennt Slot nicht



  • Hallo.

    Habe einen Dialog mit dem QTDesigner erstellt und über mutiple Vererbung in einer Klasse in meinem Programm eingebunden. Leider erkennt er aber meinen selbst definierten Slot nicht.. Weiß jemand, woran das liegt?
    Hier der Code:

    myDialog.h

    #ifndef __MYDIALOG_H__
    #define __MYDIALOG_H__
    
    #include <QDialog>
    #include "ui_myDialog.h"
    
    class myDialog : public QDialog,
    				 private Ui::myDialog
    {
    	Q_OBJECT
    
    	public:
    		myDialog(QWidget* parent);
    
    	public slots:
    		void SwapEdit();
    };
    
    #endif // __MYDIALOG_H__
    

    myDialog.cpp

    #include "myDialog.h"
    
    myDialog::myDialog(QWidget* parent)
    	: QDialog(parent)
    {
    	setupUi(this);
    
    	connect(changeButton, SIGNAL(clicked()),
    			this, SLOT(SwapEdit()));	
    }
    
    void myDialog::SwapEdit()
    {
    	QString tmp = LineEdit1->text();
    	LineEdit1->setText(LineEdit2->text());
    	LineEdit2->setText(tmp);
    }
    

    Wenn ich das Programm starte, gibt er mir folgende Meldung aus:

    Object::connect: No such slot QDialog::SwapEdit()
    Object::connect: (sender name: 'changeButton')
    Object::connect: (receiver name: 'myDialog')

    Wieso gehört hier der Slot SwapEdit() zu QDialog? Habe ihn doch in meiner Klasse myDialog definiert....
    Wo ist mein Fehler?

    MfG
    Hundefutter



  • Wieso vererbst du von ui::MyDialog und von QDialog?
    Eine Vererbung von deiner erstellten Klasse MyDialog reicht doch eigentlich. Mach mal public Ui::myDialog und schau was passiert :).
    rya.



  • Mir fällt außer der seltsamen Vererbung auch nichts anderes auf.

    Dass du von beidem nochmal explizit erben willst macht eigentlich keinen Sinn, da doch Ui::myDialog wahrscheinlich sowieso schon von QDialog geerbt hat, demnach reichts wenn du wiederum in deinem myDialog nur noch von Ui::myDialog erbst.

    Der Fehler kann demnach nur daran liegen, oder aber dass irgendetwas in deiner "ui_myDialog.h" nicht stimmt.



  • nein, Ui::myDialog erbt nicht von QDialog... es hat nur eine Methode setupUi() die als Parameter das Widget nimmt, in das es die im Desinger angelegten Widgets zeichnen soll... von daher passt das schon...

    nur die private-Vererbung macht mich stutzig



  • So, hat sich zum Glück schon geklärt, es war ein Fehler beim Initialisieren des Dialoges in der main()....

    Noch einige Erlärungen zu der von mir verwendeten Vererbung:

    class myDialog : public QDialog,
                     private Ui::myDialog
    {
    

    Die Klasse myDialog kapselt einen eigenen Dialog, der vorher mit dem QtDesigner erstellt wurde. Ui::myDialog ist die Klasse, die der Designer generiert und die ich so in meinem Programm verwenden kann.
    Um die Dialog-Funktionen zu haben, erbe ich zuerst von QDialog und dann noch PRIVATE von der Klasse, welche die Gui kapselt (Ui::myDialog). Da ich private erbe, stehen mir danach die Klassenvariablen von Ui::myDialog, welche ja die verschiedenen Widgets des Dialoges sind, als private Klassenvariablen in myDialog zur Verfügung und ich kann auf sie zugreifen.
    Somit kann ich in meinem Dialog die einzelnen Widgets behandeln, als hätte ich sie per Hand in dieser Klasse erstellt, obwohl sie mit dem QtDesigner vorher zusammengebastelt wurden.

    Hoffe, die Vererbung ist so etwas klarer geworden.

    MfG
    Hundefutter



  • Hundefutter schrieb:

    Da ich private erbe, stehen mir danach die Klassenvariablen von Ui::myDialog, welche ja die verschiedenen Widgets des Dialoges sind, als private Klassenvariablen in myDialog zur Verfügung und ich kann auf sie zugreifen.
    Somit kann ich in meinem Dialog die einzelnen Widgets behandeln, als hätte ich sie per Hand in dieser Klasse erstellt, obwohl sie mit dem QtDesigner vorher zusammengebastelt wurden.

    stell dir vor, die ganzen Widgets sind in der vom uic generierten Klasse sogar im public-Raum... eine private-Vererbung ist daher nicht notwendig 😉



  • zwutz schrieb:

    Hundefutter schrieb:

    Da ich private erbe, stehen mir danach die Klassenvariablen von Ui::myDialog, welche ja die verschiedenen Widgets des Dialoges sind, als private Klassenvariablen in myDialog zur Verfügung und ich kann auf sie zugreifen.
    Somit kann ich in meinem Dialog die einzelnen Widgets behandeln, als hätte ich sie per Hand in dieser Klasse erstellt, obwohl sie mit dem QtDesigner vorher zusammengebastelt wurden.

    stell dir vor, die ganzen Widgets sind in der vom uic generierten Klasse sogar im public-Raum... eine private-Vererbung ist daher nicht notwendig 😉

    Das ist ja schön, dass die da um public-Raum stehen, nur wenn ich nicht private sondern public von der uic Klasse erbe, dann sind die Variablen in meiner Klasse auch public und nicht private, was ich ja bei meiner Kapselung nicht haben möchte.
    Wenn ich private erbe, sind wie gesagt die Widgets in meiner Klasse auch als private Klassenvariablen vorhanden und so habe ich eine schöne Kapselung.

    MfG
    Hundefutter


Anmelden zum Antworten