Anfängerfrage: Signale und Schlitze in Qt3 und Qt4

Alles rund um die Programmierung mit Qt
Antworten
Frau Kuchen
Beiträge: 18
Registriert: 20. September 2007 14:49

Anfängerfrage: Signale und Schlitze in Qt3 und Qt4

Beitrag von Frau Kuchen »

Hallo Forengemeinde,

ich bin gerade beim Einstieg in die Programmierung mit Qt und meine ersten Programme habe ich mit KDevelop und dem Qt-Designer 3.3.7 erstellt. Mit dem Qt3-Designer konnte ich bequem eigene Slots erstellen und mit dem entsprechenden Signal verbinden. Beim Qt4-Designer scheint das nicht zu funktionieren, ausser es bezieht sich auf Elemente wie z.B. Buttons, die auf der Form liegen. Nach einigem googlen habe ich mir selbst geholfen und die entsprechende Funktionalität sozusagen nachgebaut.

Ich habe ein einfaches Beispiel gebaut und möchte euch nun bitten, mir zu sagen, ob ich das so richtig gemacht habe oder wo eurer Meinung nach noch Kritik und Nachbesserungsbedarf angebracht ist. Ja, ich weiß... :-) "RTFM" bzw. "lern erstmal die Grundlagen"... Ich bin dabei, aber es geht nicht von heute auf morgen und ich kann am besten lernen, wenn ich konkrete Aufgaben vor mir habe.

Vielen Dank im vorraus.

So, hier ist das Beispiel:

Ich habe innerhalb eines KDevelop-Projektes eine Form mit dem Qt4-Designer erstellt. Darauf befinden sich einige PushButtons und ein TextEdit-Feld. Exemplarisch habe ich für einen Button mal ein Signal-Slot-Mechanismus erzeugt.

main.cpp

Code: Alles auswählen

#include <QApplication>
#include "qt4_textformat.h"

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	Qt4_TextFormat * mw = new Qt4_TextFormat();
	mw->show();
	return app.exec();
}
textformat.h

Code: Alles auswählen

#ifndef QT4_TEXTFORMAT_H
#define QT4_TEXTFORMAT_H

#include <QWidget>
#include "ui_qt4_textformat_dlg.h"

//Extra Qt-Header
#include <qtextedit.h>

class Qt4_TextFormat : public QWidget, private Ui::Form
{
		Q_OBJECT

	public:
		Qt4_TextFormat ( QWidget* parent = 0, Qt::WFlags fl = 0 );
		~Qt4_TextFormat();
		/*$PUBLIC_FUNCTIONS$*/

	public slots:
		/*$PUBLIC_SLOTS$*/
		virtual void          slotLoeschen();    //<--- ********

	protected:
		/*$PROTECTED_FUNCTIONS$*/

	protected slots:
		/*$PROTECTED_SLOTS$*/

};
#endif
textformat.cpp

Code: Alles auswählen

#include "qt4_textformat.h"

Qt4_TextFormat::Qt4_TextFormat ( QWidget* parent, Qt::WFlags fl )
		: QWidget ( parent, fl ), Ui::Form()
{
	setupUi ( this );

	connect( pshbtnLoeschen, SIGNAL( clicked() ), this, SLOT( slotLoeschen() ) );     //<--- ********
}

Qt4_TextFormat::~Qt4_TextFormat()
{
}

/*$SPECIALIZATION$*/

void Qt4_TextFormat::slotLoeschen()
{
	txtedtText->clear();
}


Beste Grüße,

Frau Kuchen
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Sieht so ganz gut aus ^^ iss aber auch ned so schwer :-)

einzige was ich anmerken koennt, vermeid die mehrfachvererbung wo es nur geht .... also dein ui wird ich aggregieren

textformat.h

Code: Alles auswählen

#ifndef QT4_TEXTFORMAT_H
#define QT4_TEXTFORMAT_H

#include <QWidget>
#include "ui_qt4_textformat_dlg.h"

//Extra Qt-Header
#include <qtextedit.h>

class Qt4_TextFormat : public QWidget,
{
      Q_OBJECT

   public:
      Qt4_TextFormat ( QWidget* parent = 0, Qt::WFlags fl = 0 );
      ~Qt4_TextFormat();
 
   public slots:
       virtual void          slotLoeschen();    //<--- ********

    private:
       Ui::Form ui;
};
#endif 
textformat.cpp

Code: Alles auswählen

#include "qt4_textformat.h"

Qt4_TextFormat::Qt4_TextFormat ( QWidget* parent, Qt::WFlags fl ): QWidget ( parent, fl )
{
   ui.setupUi ( this );
   connect( ui.pshbtnLoeschen, SIGNAL( clicked() ), this, SLOT(lotLoeschen() );     //<--- ********
}

Qt4_TextFormat::~Qt4_TextFormat()
{
}
void Qt4_TextFormat::slotLoeschen()
{
   ui.txtedtText->clear();
}
Zu deinen Kommentaren im Quellcode:
die sollten eigentlich informationen liefern, und nicht irgendwelche eindeutigen sachen noch mal wiederholen.

private slots:
// hier nun private Slots

ist eigentlich sinnlos, den kommentar kann man sich schenken :-)
Oder generiert dir das kdevelop diese kommentare ?

in der initialisierungsliste muss man den aufruf des standardkonstruktors nicht expliziet angeben ....

Qt4_TextFormat::Qt4_TextFormat ( QWidget* parent, Qt::WFlags fl )
: QWidget ( parent, fl ), Ui::Form()

das Ui::Form() hier ist also ueberfluessig.

Ciao ....
Frau Kuchen
Beiträge: 18
Registriert: 20. September 2007 14:49

Beitrag von Frau Kuchen »

RHBaum hat geschrieben:Sieht so ganz gut aus ^^ iss aber auch ned so schwer :-)

einzige was ich anmerken koennt, vermeid die mehrfachvererbung wo es nur geht .... also dein ui wird ich aggregieren

textformat.h

Code: Alles auswählen

#ifndef QT4_TEXTFORMAT_H
#define QT4_TEXTFORMAT_H

#include <QWidget>
#include "ui_qt4_textformat_dlg.h"

//Extra Qt-Header
#include <qtextedit.h>

class Qt4_TextFormat : public QWidget,
{
      Q_OBJECT

   public:
      Qt4_TextFormat ( QWidget* parent = 0, Qt::WFlags fl = 0 );
      ~Qt4_TextFormat();
 
   public slots:
       virtual void          slotLoeschen();    //<--- ********

    private:
       Ui::Form ui;
};
#endif 
textformat.cpp

Code: Alles auswählen

#include "qt4_textformat.h"

Qt4_TextFormat::Qt4_TextFormat ( QWidget* parent, Qt::WFlags fl ): QWidget ( parent, fl )
{
   ui.setupUi ( this );
   connect( ui.pshbtnLoeschen, SIGNAL( clicked() ), this, SLOT(lotLoeschen() );     //<--- ********
}

Qt4_TextFormat::~Qt4_TextFormat()
{
}
void Qt4_TextFormat::slotLoeschen()
{
   ui.txtedtText->clear();
}
Zu deinen Kommentaren im Quellcode:
die sollten eigentlich informationen liefern, und nicht irgendwelche eindeutigen sachen noch mal wiederholen.

private slots:
// hier nun private Slots

ist eigentlich sinnlos, den kommentar kann man sich schenken :-)
Oder generiert dir das kdevelop diese kommentare ?

in der initialisierungsliste muss man den aufruf des standardkonstruktors nicht expliziet angeben ....

Qt4_TextFormat::Qt4_TextFormat ( QWidget* parent, Qt::WFlags fl )
: QWidget ( parent, fl ), Ui::Form()

das Ui::Form() hier ist also ueberfluessig.

Ciao ....

Herzlichen Dank für deine Anmerkungen.

Kommentare wie diese hier:

//<--- ********
//Extra Qt-Header

wurden von mir gemacht.


Alle anderen Kommentare wie:

/*$PUBLIC_FUNCTIONS$*/

werden vom Subclassing Wizard erzeugt, ebenso wie der meiste Text.

In der Datei textformat.h habe ich nur diese drei Zeilen geschrieben.

Code: Alles auswählen

//Extra Qt-Header
#include <qtextedit.h>
 virtual void  slotLoeschen();    //<--- ******** 
In der Datei textformat.cpp habe ich nur diese drei Zeilen geschrieben.

Code: Alles auswählen

connect( pshbtnLoeschen, SIGNAL( clicked() ), this, SLOT( slotLoeschen() ) 
void Qt4_TextFormat::slotLoeschen()
{
   txtedtText->clear();
}
einzige was ich anmerken koennt, vermeid die mehrfachvererbung wo es nur geht .... also dein ui wird ich aggregieren
Den obigen Satz verstehe ich nicht, weil ich noch Anfänger bin. Kannst du mir den obigen Satz etwas genauer erklären? Was meinst du mit "aggregieren"?

Beste Grüße,

Frau Kuchen
Antworten