Eclipse + QT

 ( kagy | 2008. július 2., szerda - 16:43 )

Tisztelt publikum!

Nem olyan rég kezdtem el foglalkozni a fenti párossal régebben delphit használtam és ott volt néhány kényelmi funkció amit nem találok az eclipse -ben. Nagy érdekelne hogy tudom az alábbiakat megoldani:

Kód kiegészítés formoknál nem megy tapasztalatom szerint.
Ha készítek egy formot amin sok-sok vizuális elem van majd kódból hivatkozni akarok rá akkor nem egészíti ki!
pl.: Ha szeretnék egy ilyen utasítást létrehozni: ui.label1->setText() akkor ui. + -re nem jön fel semmi! (normál változóknál működik)

Hibakeresés változó tartalmának megtekintése nem megy
Van egy QString típusú változóm szeretném a tartalmát megnézni hibakeresés közben, rendben meg áll a törésponton ott a változóm, de csak pointert kapok. Hogyan tudom megnézni a tartalmát ?

Deklaráció -ból hogyan tudok vázat készíteni?
Osztály váz létrehozásában segít az eclipse, de ha azt osztályban új tag függvényt akarok létrehozni headerben megadom a függvény nevet paramétereket akkor van-e rá lehetőség hogy egy gombnyomásra elkészítse a cpp-ben a vázát?

Program verziók:
- Qt: 4.4.0
- Eclipse Version: 3.3.2
Build id: M20080221-1800
- Qt C++ Eclipse Integration Version: 1.4.0
- Platform : Ubuntu linux 8.04

Előre is köszönök minden építő jellegű választ!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Kdevelop? Nem próbáltad C++ hoz és qt-hez szerintem jobb, bár én eclipset vagy 2-3 éve próbáltam.

Használtam is már a kdevelopot (azon kezdtem a QT-ét), de a Eclipsnek sok olyan szolgáltatása van ami nagy könnyebeség.
Ha emélkeim nem csalnak akkor ott is gondom volt a "form"-os kiegészítéssel és a változó tartalmának megtekintéssel.

Szerintem a debug funkciókat nem az IDE-nek, hanem a nyelvnek kell(ene) biztosítania, és a Qt ezt biztosítja is.

qDebug(QString) vagy qDebug() << QString a te barátod szerintem.

Ez fordításidőben strippelhető a binárisról.
Ebben az esetben pedig QDevelop cvs változata jó választás lehet IDE-nek.
____________________________________________________________
Slackware 12.1 - linux-2.6.25.6 - KDE 3.5.9

+1 szavazat a QDevelop-ra. Én is jól el vagyok vele.

Ki próbálom feltétlenül!
Kérdés hogy az eclipse-ből számomra hiányzó dolgok benne vannak -e? A puding próbája az evés ;)

Ezt nem garantálom.
De annyira ki van hegyezve a Qt-re, hogyha Qt-ben projektelsz, akkor szerintem nem fogsz csalódni benne. Logikus, egyszerű.

+gyors
+nem zabálja fel az egész géped
____________________________________________________________
Slackware 12.1 - linux-2.6.25.10 - KDE 3.5.9

Kódkiegészítés:
A kutya ott van elásva, hogy ha összehuzogatod a form-ot, és lemented, akkor csak egy .ui fájlt kapsz, ami nem C++ kód, tehát a kiegészítés nem tud vele mit kezdeni. A megoldás az, hogy nyomsz egy fordítást, ekkor legenerálódnak a .h fájlok, és ezután (többnyire) működik a kiegészítés.

Hibakeresés:
Sajnos a QString annyira trükkös, hogy a gdb nem tud vele mit kezdeni.
elvileg a "this->d->data" mutat a tartalomra, ami egy short unsigned int*. Ha megnézed a memóriát ahova mutat (ASCII-ben), akkor már látod.

Ennél lényegesen egyszerűbb egy qDebug(qPrintable(str));.

Deklarációból vázat:
Szerintem sehogy... Én kerestem sokat, és nem találtam, igaz a Ganymede, és az új CDT óta nem néztem. Amit ajánlok neked is, hogy telepítsd, valamivel jobb a kódkiegészítés...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

És ezeket a QDebug... varázsszavakat tulajdonképpen, hová kell beírni a programba? (A téma engem is érdekel, csak ezért vágok közbe.)

Esetleg egy példa?

Bárhova ahol szeretnéd az adott változó aktuális állapotát a parancssoros kimeneten látni ;)
Lásd még: http://doc.trolltech.com/4.4/debug.html

Kódkiegészítés:
Amit írsz az így rendben is van én is erre jutottam, de a fejlesztés kényelme szempontjából jó lenne ha ez menne (nem kellene designerben nézni hogy tulajdon kép mi is a grafikus objektumnak a neve majd ha megvan hogy mondjuk ez egy QDateEdit akkor ennek is adná a tagfüggvényeit stb.)
Valószínű azt kellene elérni hogy az ui.ból generált headert valahogy dolgozza fel a kódkiegészítő része az eclipse-nek na de hogyan ?

Hibakeresés:
qDebug-os megoldást használom jelenleg, de valljuk meg őszintén nem ez a hatékony megoldás.
A QString helyet mondhattam volna mondjuk egy QSqlQuery típusú változót (vagy bármit más objektumot) sokszor jó volna tényleg a debug módban látni az objektum értékét.
Lehet hogy másképp kell felraknom a kérdést: Debug módban hogyan lehet a "castol"-ni úgy a változót hogy lássam az értékét

pelz -nek : qDebug használata

#include <QDebug>

//majd a kódban:
qDebug() << VALTOZO;

Kösz!
Nekem ennyi elég is. Az az igazság, hogy általában nagyon kevés alkalommal van szükség debug-ra. De ha még is kellene, jó lesz tudni, hogyan csináljam.

A qDebug fv-es formáját én jobban szeretem, mert nem kell plusz include, és olyan mint a printf.

qDebug("%s %d %x %03f",qPrintable(str),3,0x12,0.03);

A qPrintable a localnak megfelelő kódolásra konvertálja a QStringet...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Kódkiegészítés:
Látom nem érted.
"A megoldás az, hogy nyomsz egy fordítást, ekkor legenerálódnak a .h fájlok, és ezután (többnyire) működik a kiegészítés."

Azaz, ha létrehozod a form-ot, lemented, majd fordítasz egyet, onnantól létezik a .h fájl, amit az eclipse be is indexel magától, és ekkortól működik a kódkiegészítés.

Hibakeresés:
Megszokás kérdése. Én csak legvégső esetben használom a debug-ot, főleg, mert többszálú programnál szinte teljesen értelmetlen...

"Debug módban hogyan lehet a "castol"-ni úgy a változót hogy lássam az értékét"
???

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Kódkiegészítés:
Közben rá jöttem a megfejtésre!
Létrehozom az ui -t, fordítás létrejönnek a headerek (ui_*.h)
A gond az ott volt hogy a létrejövő ui_*.h -k nem abban az alkönyvtárba generálódnak mint az *.ui-k voltak
Megoldása az ui hoz tartozó class headeréjben az include hivatkozást át kell írni hogy lássa a ui_*.h header-t
esetemben "../" beszúrása!
(Még megoldás lehet az is hogy az ui_*.h kat ugyan abba az alkönyvtárba generálja mint a *.ui-k vannak, ezt a pro állományban lehet kérni UI_HEADERS_DIR -megadásával (nem próbáltam ki) !

Hibakeresés:
Sajnos ez a qDebug() -os módszer elég kényelmetlen mert ha egy változó értekére kíváncsi vagyok akkor módosítanom kell a forrás-t újrafordítani stb. Szóval macerás.
gdb konzoljába írva valami "bűvös szavakat" nem lehet elérni hogy beszedés legyen a változó tartalma?

Nekem ugyanoda hozza létre... Tehát nem kell semmit átírnom.
Egyébként ha nem írod át, akkor is elérhető kell legyen, különben a gcc hogyan fordítaná le?
Ne irogass át semmit, inkább mond meg az eclipse-nek, hogy abban a könyvtárban is nézze a .h-kat...

Szerintem nincsenek bűvös szavak, a gdb ennyit tud (nem tudom más tud-e többet)...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Kodkiegeszites: Kezzel rakod ossze a form-ot/dialog-ot es nem Designer-rel. Nem lesznek UI-k. Aztan abbol orokolsz. Igy mindig lesz kiegeszitesed es nem kell varni egy forditast. Mellesleg jobban megerted a layout-ok mukodeset is.

Vagy pl. van 9 db QLineEdit-ed amit beraksz egy QValueVector-ba, hogy konnyebben kezeljed. No ezt Designer-ben mar nehezen csinalod meg.

Egyetértek Rinyu-val. Jogosak a megjegyzései.

Csináltam én kézzel is, designerrel is.
Egyszer érdekes szőrözni kézzel, hogy megértsd a dolgokat, de utána nem éri meg, annyival gyorsabb a designer. A kódkiegészítés is működik, sőt, működik az autoconnect is. Rengeteg időt megspórolsz.

Persze van, hogy a designer kevés, akkor lehet kézzel. De ez elég ritka...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o