Seite 1 von 1
Automatische Codegenerierung für QT?
Verfasst: 28. März 2007 12:09
von UmmonTL
Hallo,
wie der Titel schon sagt suche ich Möglichkeiten mir Teile des für QT notwendigen Codes automatisch generieren zu lassen. Insbesondere bei den Custom Slots gibt es extrem viel Redundanz die mir viel störende Copy-Paste Arbeit verursacht.
Als Beispiel nehmen wir die Menuleiste, wenn ich einen Menupunkt 'Abort' habe gibt es die Action actionAbort. Diese steht so im .ui File und ich muss im .cpp File ein Signal von dieser Action mit einem Custom Slot verbinden (actionAbort_activated()) welcher insgesamt drei mal im Code auftaucht, im Header zur Definition und im .cpp File beim connect und der eigentlichen Methode.
Sollte sich jetzt was in der Namenskonvention ändern bedeutet das für mich dass ich an fünf Stellen diesen Namen von Hand verändern muss was bei rund 40 Menüpunkten ganz schön in Arbeit ausarten kann.
Derzeit Programmiere ich QT mit C++ in der Eclipse-IDE was sich leider als recht suboptimal herausgestellt hat. Ich suche also entweder andere IDE's oder Plugins für eclipse die mir die Arbeit erleichtern. Im optimalen Fall eine Integration des Designers sodass durch Veränderungen in diesem direkt die Custom Slots und connects im Quellcode geupdated werden. Ansonsten würde mir schon ein ordentliches Refactoring sowie automatische Anpassung von Methodendefinitionen im Header und dem Quellcode reichen.
Mit Eclipse für Java war das ja ohne Probleme möglich jedoch mit C++ scheint es da noch große Probleme zu geben.
Falls mir also irgendwer Tipps geben kann zu einer besseren IDE oder um Eclipse besser einzurichten wäre mir sehr geholfen, ansonsten würde mich noch interessieren ob die Programmierung von QT unter Java oder Python flüssiger läuft, dann könnte ich eventuell darauf umschwenken.
Viele Grüße, Ummon.
Verfasst: 28. März 2007 15:03
von patrik08
Ich rate dir ... am anfang vom qt lernen... viel zeit mit dem designer zu verbringen... insbesondere ...
http://doc.trolltech.com/4.2/designer-u ... dgets.html
dann kanst du mit den event & signalen .. viel mehr machen... und naturlich zeit sparen...
da es eine rechtschreibung fuer den code noch nicht gibt!....
Verfasst: 28. März 2007 15:56
von Tarek
Verfasst: 3. April 2007 13:46
von Sephral
Hallo,
das Thema Schreibarbeit bei QActions hat mich auch gestört und ich habe eine recht einfach Lösung für mich gefunden.
Code: Alles auswählen
class MyQAction : public QAction
{
Q_OBJECT
public:
MyQAction(QObject *parent);
MyQAction(QString text, QObject *parent);
MyQAction(QString text, QObject *parent, int id);
MyQAction(const QIcon & icon, const QString & text, QObject * parent );
~MyQAction();
void setId(int id);
private:
int m_iId;
public slots:
void mytrigger();
signals:
void idTriggered(int);
};
Code: Alles auswählen
#include "myqaction.h"
MyQAction::MyQAction(QObject *parent)
: QAction(parent)
{
this->m_iId = 0;
connect(this, SIGNAL(triggered()), this, SLOT(mytrigger()));
}
MyQAction::MyQAction(QString text, QObject *parent)
: QAction(text, parent)
{
this->m_iId = 0;
connect(this, SIGNAL(triggered()), this, SLOT(mytrigger()));
}
MyQAction::MyQAction(QString text, QObject *parent, int id)
: QAction(text, parent)
{
this->m_iId = id;
connect(this, SIGNAL(triggered()), this, SLOT(mytrigger()));
}
MyQAction::MyQAction(const QIcon & icon, const QString & text, QObject * parent )
: QAction(icon, text, parent)
{
this->m_iId = 0;
connect(this, SIGNAL(triggered()), this, SLOT(mytrigger()));
}
MyQAction::~MyQAction()
{
}
void MyQAction::setId(int id)
{
this->m_iId = id;
}
void MyQAction::mytrigger()
{
emit idTriggered(this->m_iId);
}
Wozu das Ganze?
Ganz einfach, ich habe im Programm #define's für alle Aktionen. Ich erzeuge nun statt QActions meine MyQActions, gebe der MyQAction die ID der Aktion mit und lasse alle Actions in den selben Slot laufen (SIGNAL(idTriggered(int)). In diesem Slot wird dann mit einem switch (über die übergebene id) die entsprechende Aktion ausgelöst.
So braucht man kein auto-connect und spart sich sehr viel hässlichen Code.
Zumindest für mich funktioniert das perfekt, da meine Anwendungen zum Teil sehr QAction-Lastig sind, spare ich dadurch viel Schreibarbeit.
Ciao,
Sephral
Verfasst: 4. April 2007 12:08
von UmmonTL
Hallo und danke für die Antworten,
das mit dem Auto-Connect hört sich schonmal ganz gut an. Alle Actions über einen Slot laufen zu lassen mit einem riesigen Switch-Statement halte ich jedoch für zu unübersichtlich (mein Code muss noch von diversen anderen Leuten verstanden und verändert werden).
Um nochmal auf meine ursprüngliche Frage zu kommen, ich suche eine IDE mit der es möglich ist auf allgemeinen C++ Code Features wie Refactoring, Codeverschönerung, Codevervollständigung und automatische Codegenerierung anwenden zu können. Wenn dies auch direkt mit QT spezifischem Code funktioniert, um so besser.
Ich bin diese Features von Eclipse und Java gewohnt und behaupte jetzt einfach dass sich dadurch meine Programmiergeschwindigkeit knapp verdoppelt wobei der Code gleichzeitig übersichtlicher und weniger fehlerbehaftet ist. Mit Eclipde, CDT und C++ sollte das ganze teilweise auch möglich sein, ist jedoch nach meinen Erfahrungen unbenutzbar langsam (Rechner wird total ausgelastet wenn der Indexer anspringt, eine Auflistung möglicher Methoden einer Klasse anzeigen zu lassen benötigt ca. eine Minute).
Viele Grüße, Ummon.
Verfasst: 4. April 2007 14:39
von Volker
Hast Du schon Visual Studio zusammen mit Visual Assist probiert?
Zu mindest letzteres kostet allerdings Geld. Und ob Visual Assist mit der Express Version von Visual C++ zusammenarbeitet weiss ich auch nicht.
By the way, um welche Plattform geht's eigentlich?
Verfasst: 5. April 2007 02:25
von -=Freaky=-
nein visual assist x kann man nicht mit der express edition vom visual studio benutzen.
mfg,
julian
Verfasst: 5. April 2007 11:17
von UmmonTL
Stimmt, das Betriebssystem könnte man auch mal erwähnen,

ich arbeite auf einem Debian Linux.
Wie steht es mit KDevelop?
In den Features lese ich leider nichts über Refactoring aber ansonsten hört sich das ganz vielversprechend an. Gibt es Erfahrungswerte zur Bedienbarkeit bzw. Lernkurve? Vielleicht sollte ich dazu noch im anderen Forum eine Frage stellen.
Und hat wer einen direkten Vergleich zur QT-Programmierung mit C++ und Java oder Python?
Verfasst: 6. April 2007 10:47
von lepsai
Suche in Google nach Java vs. Qt... Da gibt es ein White Paper dazu
Verfasst: 6. April 2007 11:05
von May-C
Also ich benutze hier kdevelop unter kubuntu und bin äusserst zufrieden. Das einzige was mir fehlt ist refectoring. Es gibt noch:
http://kde-apps.org/content/show.php/Ed ... tent=50859
und
http://kde-apps.org/content/show.php/Mo ... tent=49089
Die habe ich mir aber nur kurz angesehen und halte ich für noch nicht ausgereift genauso wie QDevelop. Refactoring können diese auch nicht, soweit ich weiss.
Ein Programm, das z.T. refactoring beherrscht ist eric3. Dann musst du jedoch dein Code in PyQt schreiben.
Verfasst: 11. April 2007 11:08
von UmmonTL
Nochmal vielen dank für die Antworten, ich werde mal ein paar der genannten Varianten antesten. Praktischerweise wird das Programm an dem ich arbeite über CORBA angesprochen, d.h. die GUI-Programmierung kann in jeder beliebigen Sprache erfolgen.
Wenn ich ein paar Erfahrungswerte gesammelt habe melde ich mich nochmal.