QT/KDE programozása

 ( kagy | 2004. szeptember 1., szerda - 14:56 )

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ő.

Szia!

Mindekinek köszönöm a hozzászólását, tanácsát, és hogy megosztotta a tapasztalatait!

[quote:63ecc5b3b0="fdavid"]
Eloszoris fogalmak, ugyanis itt nemi keveredes latszik.
[/quote:63ecc5b3b0]
Igen, volt egy kavarodás a fejembe ebbe a témakörben!

[quote:63ecc5b3b0="fdavid"]
Konyv (szerintem tokeletes):
Programming with Qt (2nd Edition)
by Matthias Kalle Dalheimer

most raadasul kedveymenzes
http://www.amazon.com/exec/obidos/tg/detail/-/0596000642/103-8691204-0776650?v=glance
(elnezest nem reklam kivan lenni)
[/quote:63ecc5b3b0]
Igen, ezek tökéletesek!

[quote:63ecc5b3b0="fdavid"]
Portolhatosag:
A QT-nal torekszenek ra, de 100%-os portolhatosag nem igazan letezik. Szoval aprobb problemakra szamitani kell, de ezekre felhivjak a figyelmet.
Viszont a kdelibs nem portolhato!
[/quote:63ecc5b3b0]
Miért is nem portolható ?
Ha jól tudom akkor cygwin-en keresztül lehet KDE-t futatni. Nem ?

[quote:63ecc5b3b0="fdavid"]
Liszensz:
Windowsra letezik free edition, meg a 2.3-as verziobol. Ezzel kizarolag freeware programokat fejleszthetsz. Linux/Unix es MacOS X-re letezik a legfrissebb QPL-es verzio, amivel kizarolag GPL-es program fejlesztheto, es a liszensz nem valtoztathato meg a fejlesztes folyaman. Tehat ha kereskedelmi szoftvert akarsz, akkor az elso pillanattol kezdve rendelkezned kell kereskedelmi liszensszel.

Megj:
A Kylix/Delphi is QT-re epul.

A QT bar kivalo (talan a ma elerheto legjobb) eszkoz, kicsit borsos az ara. Alternativakent kinalkozik meg pl. a wxWidgets.
[/quote:63ecc5b3b0]
A megrendelőnek vannak ilyen jellegű igénye (kereszt platform), értelem szerűen viselli az evvel kapcsolatos plusz terheket.

Jelenleg csak a lehetőségeket akarom feltárni, kipróbálni!
Szóba jött természetesen a Kylix/Delphi páros is, amit ajánlotatok is, de személy szerint akkor már inkább QT és C mint Kylix és pascal.
Van egy két modul amit mind a kettővel meg fogom csinálni és utánna lehet dönteni,úgyhogy az elkövetkező néhány héten bizots lesz konkrét kérdésem a QT-vel kapcsolatban is.

Üdv
kagy

[quote:65da6b2bf3="kagy"][quote:65da6b2bf3="fdavid"]
Portolhatosag:
A QT-nal torekszenek ra, de 100%-os portolhatosag nem igazan letezik. Szoval aprobb problemakra szamitani kell, de ezekre felhivjak a figyelmet.
Viszont a kdelibs nem portolhato!
[/quote:65da6b2bf3]
Miért is nem portolható ?
Ha jól tudom akkor cygwin-en keresztül lehet KDE-t futatni. Nem ?[/quote:65da6b2bf3]

A Cygwinen keresztuli futtatas nem jelent portolhatosagot, ugyanis nem kapsz nativ futtathato kodot. A cygwin valojaban egy emulator.

Ezzel szemben a QT eseteben - elvileg - fogod a kodot es leforditod Lunixra/Winre/Macre es nativan fut.

A tapaztalat azt mutatja, hogy hasznosak az emulatork, ha nincs mas megoldas. De tenyleg csak, ha nincs mas megoldas.

Szia!

[quote:91c9245bee="fdavid"]
Minden osztalynak, amelyik signalt vagy slotot deklaral, tartalmaznia kell a Q_OBJECT makrot. Ennek oka van, de hogy mi is ez pontosan, annak kideriteset hazi feladatnak feladom. ;-)[/quote:91c9245bee]

A hazit köszi, és jó diákhoz illően meg is oldottam :)
Röviden a megoldás:
Ha az ember QT -hez kapcsolódó makrókat (Q_OBJECT, slots, signals stb ) akar használni akkor mivel ez nem szabványos c/c++ makrók rá kell engedni a moc -nak nevezet programot ami kicseréli szabványos c/c++ hívásokra.

Hosszabban a megoldás! Hátha tanul még belőle valaki valamit, vagy esetleg a profik kiegészítik valami apró trükkel!
Egy a lényeg több állományra kellet szétszedi komoly művemet. Szóval:
1,Csináltam a kdeveloppal egy új projektet
C++/Qmake/Hello world program-ból kiindulva
Azért ezzel mert ez használja a qmake progit ami olyan Makefilet generál amibe megfelelően fogja kezelni a moc állományokat (létrehozza, stb.)
2, A meglévő main fügvényt tartalmazó állományt ami ekkor létrejött módosítottam:
[code:1:91c9245bee]
#include "mywidget.h"
#include <qapplication.h>

int main(int argc, char *argv[])
{
QApplication a( argc, argv );
MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}
[/code:1:91c9245bee]
3, Ezekután a kdevelop Osztály varázslójával léterhoztam a MyWidget osztályt. FOntos volt hogy a származtattot osztály a Qwidget legyen (be kellet pipálnom)
Ekkor létrejön két állomány a mywidget.h, mywidget.cpp
Melyekbe szépen be ömlesztettem a már megírtkódómat.
mywidget.h
[code:1:91c9245bee]
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <qwidget.h>

class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0, const char *name = 0);

~MyWidget();

public slots:
void Gomb1LE();
};
#endif
[/code:1:91c9245bee]
mywidget.cpp
[code:1:91c9245bee]
#include "mywidget.h"
#include <qapplication.h>
#include <qpushbutton.h>
#include <iostream>

MyWidget::MyWidget(QWidget *parent, const char *name)
: QWidget(parent, name)
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

QPushButton *gomb1 = new QPushButton( "Gomb1", this, "gomb1" );
gomb1->setGeometry(40,40, 75, 30 );
gomb1->show();
connect( gomb1, SIGNAL(clicked()), this, SLOT(Gomb1LE()) );
}

MyWidget::~MyWidget()
{
}

void MyWidget::Gomb1LE()
{
std::cout << "Le\n";
}
[/code:1:91c9245bee]
ezután F8 fordítás stb. (elkészíti azokat a bizonyos moc állományt, és összelinkeli)

Azért maradt még egy két kérdésem
- A Quit gombom ha jól sejtem azért működött mert azt a signalt-slotot nem én hanem a QT-ban definiálták!
-Hiba kereséshez mit ajánlatok. Öszintén megmondva a gdb nem szimpatikus mert ahogy nézem pilóta vizsga kell hozzá. A kdbg jónak tűnik de ahoz mivel külső program ezért nem működik együtt a kdeveloppal. Esetleg rá lehet beszélni valahogy hogy gdb helyet mást használjon.

Köszi az útbaigazítást!

Szia,

orulok, hogy haladsz.

Debugger:
Tudomasom szerint a KDevelop csak a gdb-t integralja, de abban egyetertunk, hogy egyelore nem tul sikeresen. De el kell, hogy keseritselek, a legjobban akkor jarsz, ha leteszed a pilotavizsgat.

Szoval vagy parancssorosan hasznalod a gdb-t, vagy vmelyik forntendjevel egyutt (ide tartozik a KDevelop is). A frontendek kozul jonak tartjak meg a DDD-t, de meg joparat talalsz a neten. Hogy mennyire hasznalhatoak, az persze jo kerdes.

[quote:db1d7fe4fb="kagy"]
- A Quit gombom ha jól sejtem azért működött mert azt a signalt-slotot nem én hanem a QT-ban definiálták!
[/quote:db1d7fe4fb]

Pontosan errol van szo. Es ha a hibauzenetet megnezed, akkor lathatod, hogy az ososztalyban (QWidget) keresi az altalad deklaralt slotot. Ez azert van, mert ott mar van neki metaobjectje (meghivodott a moc, mert hasznalatak a Q_OBJECT makrot), az altalad leszarmaztatott osztalyhoz pedig meg nem volt metaobject.

Üdv! A fórumról valakitől kaptam egy e-mailt, hogy hol vettem meg itthon a könyvet (C++ GUI programming with qt3). Kérem, hogy keressen meg megint e-mailben, mert elfelejtettem a címét, viszont megvan az oldal! Köszönöm!

Üdv mindnekinek!

Elsősorban tapasztalatokra lenné kíváncsi a fenti témában, illetve ha tudnátok mondani jó doksikat / könyveket amivel szépen bele lehet rázódni meg lehet tanulni QT/KDE programozást. (Természetesen olvasom a http://www.trolltech.com/ és a http://www.kdevelop.org/ oldalakat )

Programozik- e egyáltalán ma magyarországon valaki QT/KDE alat?
Tapasztalatai milyenek?
-Fejlesztés gyorsasága
-Alkalmazás gyorsasága
-Qt stabilitása (különösen a qsocket illetve az SQL -es része érdekelne)

Olvastam azt is hogy létezik a qt-nak windowosos platformra fordítója, ezt próbálta már valaki, használható és milyen módon?
Mennyire müködik az hogy megirom Linux alat az alkalmazásom majd átviszem wondows alá?
Az az igazság hogy ezzel komoly kétségeim vannak. Tapasztalataim alapján a borlandnak se sikerült maradlktalanul ezt megcsinálnia a Kylix/Delphi párossal. Sajnos!
Olyan alkalmazást szeretnék készíteni ami Linuxon windowson egyaránt müködik. Ha QT -vel nem megy a dolog akkor mit javasoltok?

Egyáltalán mivel érdemes QT-s alkalmazást fejleszteni?
A kdevelop-ot néztem egész jónak tűnik. Esetleg mit érdemes még megnézni?

Üdv
kagy

[quote:44ce2df6de]Olyan alkalmazást szeretnék készíteni ami Linuxon windowson egyaránt müködik. Ha QT -vel nem megy a dolog akkor mit javasoltok?[/quote:44ce2df6de]
Én nem vagyok programozó de nézd meg [url=http://www.fltk.org]ezt[/url].

Szia!

Szerintem a QT a ma kapható legjobb C++ alapú fejlesztőeszköz grafikus programokhoz. Linux alatt már sokszor használtam, csak jó tapasztalataim vannak. Nagyon jó dokumentált, rengeteg funkciója van. Ha érdekel, van belőle free változat Linux, Unix és MacOSX alá. Természetesen a free ebben az esetben nem azt jelenti, hogy gagyi, csak nem kapsz hozzá supportot. Mellesleg minden modern Linux disztribució része.
SQL-t nagyon jól támogatja, csak ajánlani tudom. Van egy rakás segédprogram is hozzá, mint pl. a QT-designer ami egy felület tervező és még sok más.
Remélem segítettem.

[quote:b8b0c36f7e="kagy"] tudnátok mondani jó doksikat / könyveket amivel szépen bele lehet rázódni meg lehet tanulni QT/KDE programozást.
...
Egyáltalán mivel érdemes QT-s alkalmazást fejleszteni?
A kdevelop-ot néztem egész jónak tűnik. Esetleg mit érdemes még megnézni?
[/quote:b8b0c36f7e]

Én a Bányász/Levendovszky féle Linux Programozás könyből tanultam (mondjuk jártam is hozzájuk előadásra). Van egy viszonylag jó, elsősorban koncepcionális áttekintés a QT/KDE programozásról benne. Ez persze csak az elinduláshoz elég, de ezután már magad is fel tudod fedezni a többit.

A Kdevelop nekem nagyon nem tetszett. Inkább a QT Designert javaslom.

[quote:e1292523a5="bha"]Szia!

Szerintem a QT a ma kapható legjobb C++ alapú fejlesztőeszköz grafikus programokhoz. Linux alatt már sokszor használtam, csak jó tapasztalataim vannak. Nagyon jó dokumentált, rengeteg funkciója van.
[/quote:e1292523a5]
Pont ezért keltette fel az érdeklődésemet.
Tapasztalatokra voltam elsősorban kíváncsi.

[quote:e1292523a5="bha"]
Ha érdekel, van belőle free változat Linux, Unix és MacOSX alá. Természetesen a free ebben az esetben nem azt jelenti, hogy gagyi, csak nem kapsz hozzá supportot. Mellesleg minden modern Linux disztribució része.
[/quote:e1292523a5]
A licenszével kapcsolatban nem látok egészen tisztán.
Én így értelmezem (Javítsátok ki ha rosszul gondolom)
- Ha GPL programot írok akkor inygenes és nem kell licenszért fizetni
- Ha kereskedelmi (Tehát az az alkalmazást amit létrehozok vele azt eladom) akkor ki kell csengetnem a licensz díjat ráadásul ha két platformra akarom akkor az még drágább is.

[quote:e1292523a5="bha"]
SQL-t nagyon jól támogatja, csak ajánlani tudom. Van egy rakás segédprogram is hozzá, mint pl. a QT-designer ami egy felület tervező és még sok más.
Remélem segítettem.[/quote:e1292523a5]
Igen, nem is keveset! :)
Megynyugtató hogy idehaza is használja valaki!
Szabad megkérdeznem hogy GPL alkalmazást fejlesztettél vele vagy kereskedelmit, esetleg milyen jellegű szoftvert.

Üdv
kagy

Olyan alkalmazást szeretnék készíteni ami Linuxon windowson egyaránt müködik. Ha QT -vel nem megy a dolog akkor mit javasoltok?

A QT nem ingyenes windowsra!
Próbálkozhatsz helyette GTK-val.

Ha nem idegenkedsz a Python-tól, akkor
a pyqt/pygtk használatával lényegesen
gyorsabban haladhatsz, és a kód is sokkal
átláthatóbb/karbantarthatóbb lesz.

Bajusz Tamás

[quote:a5b09ba656="kagy"]Üdv mindnekinek!

Elsősorban tapasztalatokra lenné kíváncsi a fenti témában, illetve ha tudnátok mondani jó doksikat / könyveket amivel szépen bele lehet rázódni meg lehet tanulni QT/KDE programozást. (Természetesen olvasom a http://www.trolltech.com/ és a http://www.kdevelop.org/ oldalakat )

Programozik- e egyáltalán ma magyarországon valaki QT/KDE alat?
Tapasztalatai milyenek?
-Fejlesztés gyorsasága
-Alkalmazás gyorsasága
-Qt stabilitása (különösen a qsocket illetve az SQL -es része érdekelne)

Olvastam azt is hogy létezik a qt-nak windowosos platformra fordítója, ezt próbálta már valaki, használható és milyen módon?
Mennyire müködik az hogy megirom Linux alat az alkalmazásom majd átviszem wondows alá?
Az az igazság hogy ezzel komoly kétségeim vannak. Tapasztalataim alapján a borlandnak se sikerült maradlktalanul ezt megcsinálnia a Kylix/Delphi párossal. Sajnos!
Olyan alkalmazást szeretnék készíteni ami Linuxon windowson egyaránt müködik. Ha QT -vel nem megy a dolog akkor mit javasoltok?

Egyáltalán mivel érdemes QT-s alkalmazást fejleszteni?
A kdevelop-ot néztem egész jónak tűnik. Esetleg mit érdemes még megnézni?

Üdv
kagy[/quote:a5b09ba656]

Szia!

Bar a legtobb informacio megtalalhato a Trolltech weboldalan, azert megprobalok valaszolni a kerdeseidre.

Eloszoris fogalmak, ugyanis itt nemi keveredes latszik.

Tehat a QT egy többplatformos konyvtarrendszer C++ -hoz.
Valoszinuleg minden C++ fordito, amelyik az adott platformon elerheto, le fogja forditani a QT-s alkalmazast.
A fejlesztokornyezet nem azonos sem a forditoval sem pedig egy konyvtarrendszerrel. A fejlesztokornyezet csak integral bizonyos eszkozoket, igy adott esetben a fenti ketto is lehet egy fejlesztokornyezet resze.

Konyv (szerintem tokeletes):
Programming with Qt (2nd Edition)
by Matthias Kalle Dalheimer

most raadasul kedveymenzes
http://www.amazon.com/exec/obidos/tg/detail/-/0596000642/103-8691204-0776650?v=glance
(elnezest nem reklam kivan lenni)

Portolhatosag:
A QT-nal torekszenek ra, de 100%-os portolhatosag nem igazan letezik. Szoval aprobb problemakra szamitani kell, de ezekre felhivjak a figyelmet.
Viszont a kdelibs nem portolhato!

Liszensz:
Windowsra letezik free edition, meg a 2.3-as verziobol. Ezzel kizarolag freeware programokat fejleszthetsz. Linux/Unix es MacOS X-re letezik a legfrissebb QPL-es verzio, amivel kizarolag GPL-es program fejlesztheto, es a liszensz nem valtoztathato meg a fejlesztes folyaman. Tehat ha kereskedelmi szoftvert akarsz, akkor az elso pillanattol kezdve rendelkezned kell kereskedelmi liszensszel.

Megj:
A Kylix/Delphi is QT-re epul.

A QT bar kivalo (talan a ma elerheto legjobb) eszkoz, kicsit borsos az ara. Alternativakent kinalkozik meg pl. a wxWidgets.

Szoval kicsit tobb google, es akkor a celiranyosabb kerdesekre tobben es szivesebben fognak valaszolni, mert ez egy kicsit azert "lustavagyokkeresni" jellegu topikinditas volt.

Tiszteletem! Nagy probléma megoldására szeretnék ötleteket kérni. Van itt egy projekt, amiben egy szállodai infórendszert kell megírni (nem, nem éles környezetben való használatra, csak egy tantárgy keretén belül.) A program C++/Qt/MySQL kombóval készült. Namost van 3 fájlom: main.cpp, progi.cpp, progi.h + a program ablakának ui fájlja, amit Qt Designer-rel kreáltam (Ennek tartalma egy QDataTable, ami az adatbázis egyik tábláját jeleníti meg az ablakban). Namost, designerben beállítottam a Database Connection: Name: dbz, driver: QMYSQL3, database name, host, pass, username... Elmentem. Átmászok KDevelop-ba, szépen tanultak alapján, subclassing wizarddal megcsinálom a megfelelő osztályokat mindent. Lefordítom a programot, hogy lássam működőképes-e.... Lefordul, indít: Warning could not connect database. Pedig beállítottam designerben az adatbázis kapcsolatot o_O Ez mi? Könyv elő, le van írva, hogy jó lenne egy createConnection() függvény, ami létrehozza a kapcsolatot az adatbázissal. (Miért kell még1x???). ok. main.cpp: [code:1:ec8e34141c]void createConnection() {
QSqlDatabase *dbaz = QSqlDatabase::addDatabase( "QMYSQL3" );
dbaz->setDatabaseName( DB_NAME );
dbaz->setUserName( DB_UNAME );
dbaz->setPassword( DB_PASSWD );
dbaz->setHostName( DB_HOST );

if ( dbaz->open() ) {
QMessageBox::information(NULL, "Sikerült", "Sikerült csatlakozni az adatbázishoz!");
} else {
QMessageBox::critical(NULL, "Hiba a kapcsolódáskor", "Nem sikerült csatlakozni az adatbázis szerverhez.\n Kérjük ellenõrizze hálózati kapcsolatát, valamint,\n hogy fut-e a MySQL szerver, majd próbálja\n meg ismét elindítani a programot!");
}
}[/code:1:ec8e34141c], majd main()-ben megfelelően meghívva a createConnection() szépen lefordul, elindul és láss csodát, megjelennek a táblák, kitöltve az adatokkal! örömkönnyek szembeszökés :) Na akkor csináljunk vmi lekérdezést. Formra felvettem egy gombot, csináltam hozzá egy slotot kerdezzLe() néven. Signals/slotsban: pushButton1 clicked() program_main_form kerdezzLe(). Rendben. progi.h-ban virtual void kerdezzLe; felvesz, progi.cpp-ben implementálás megkezd. Namost, egy sima: SELECT userkod, usernev FROM User WHERE userkod = 1 tesztlekérést implementáltam a kerdezzLe() slotba, ami egy QMessageBox::information ablakba kiirja a userkodot es a usernevet. Ok. Lefordul, program elindul, gombot lenyomom, nem történik semmi. KDevelop-ban alkalmazás kimeneten: QSqlCursor: value() not positioned on a valid record. ez megint mi? Van aktív kapcsolat az adatbázissal main.cpp-ben megvalósítva... Könyv megint elő: progi.h-ban: [code:1:ec8e34141c]private: QSqlDatabase *db;[/code:1:ec8e34141c] progi.cpp-ben konstruktorba vegyük fel: [code:1:ec8e34141c]db = QSqlDatabase::database() // ez ha ures, akkor a default adatbaziskapcsolatot aktivalja[/code:1:ec8e34141c]. kerdezzLe() módosít: [code:1:ec8e34141c]QSqlQuery query(db);
query.exec("SELECT userkod, usernev FROM User WHERE userkod = 1");
int kodja = query.value(0).toInt();
QString neve = query.value(1).toString();
QMessageBox::information(this,"Adatok",tr("Kod: %1 Nev: %2").arg(kodja).arg(neve)); [/code:1:ec8e34141c]. Rendben, újrafordítás ismét. Elindul, nyomom a gombot, megint nem csinál semmit.... Most ott tartok hogy kb hajam kitépem, ha nem tudom megcsinálni. Szeretném megkérdezni, hogy ha main.cpp-ben létrehozok egy kapcsolatot az adatbázisommal, akkor azt a kapcsolatot (akár még úgy, hogy nevet is adok neki az addDatabase()-ben) a progi.cpp-ben miért nem tudja kezelni egyetlen eljárás sem. Hogyan csináljam meg, hogy tfh. KAPCS1 nevű kapcsolatot használva a progi.cpp kerdezzLe() eljárása hajlandó legyen lekérdezni az adatbázisból?

Előre köszönök minden építő jellegű hozzászólást, és elnézést a kicsit hosszú kommentért! :)

A Pythonról azt hallottam, hogy nem lehet az általam fejlesztett kódot nem tudom elrejteni a felhasználó elöl. Ha ez igaz, akkor meg hogyan tudom megvédeni a szellemi termékem. Fogja, kicsit átírja aztán továbbadja... Ez valahogy nem kóser. Vagy én tudom rosszul a dolgokat... Ezért is maradtam egyenlőre a Kylix-nál. Nem tul stabil az IDE, de gyorsan lehet vele fejlesztgetni :roll: :roll: :roll:

[quote:9b4abe7525="gyomber"]A Pythonról azt hallottam, hogy nem lehet az általam fejlesztett kódot nem tudom elrejteni a felhasználó elöl. Ha ez igaz, akkor meg hogyan tudom megvédeni a szellemi termékem. Fogja, kicsit átírja aztán továbbadja... Ez valahogy nem kóser. Vagy én tudom rosszul a dolgokat... Ezért is maradtam egyenlőre a Kylix-nál. Nem tul stabil az IDE, de gyorsan lehet vele fejlesztgetni :roll: :roll: :roll:[/quote:9b4abe7525]
humm, hat igen, eleg nehez pythonnal closed source szoftvert fejleszteni.

[quote:d1cd0c3927]Programozik- e egyáltalán ma magyarországon valaki QT/KDE alatt?[/quote:d1cd0c3927]
En meg nem, csak szeretnek. Kb ott allok mint te, csak nekem meg nem volt idom elkezdeni utana erdeklodni. De mindenkeppen szeretnek belevagni, mert nagyon hianyzik a dos-os tagline-om ;) Felturboznam linux alatt grafikusra. Mindig elfelejtem a nevnapokat, szuletesnapokat, evfordulokat amiota linux-ra attertem es nem tudom hasznalni :)
Ha sikerult elindulnod valamerre, akkor szivesen olvasnek par sort rola, hogy mikent hogyan merre meddig mit.

jonci

Szeretnék én is feltenni egy kérdést.

OpenOffice calc-táblát szeretnék kitölteni programból, tehát vmi. C/C++ API van e hozzá?
(adott egy táblázat, amelybe adatokat a prg. írná be autómatikusan, majd elmentené vmilyen más néven. persze a user-nek nem kell semit csinálnia csak elindítja a prg.-t majd kap egy kész, kitöltött táblát elmentve! )
Az OOo SDK nagyon bonyolult, egy konkrét példa kellene!

Vkinek van e ilyen irányú tapasztalata!

Qt programozáshoz, ajánlom a C++ GUI programming with Qt című művet (isbn 0-13-124072-2, itthon van egy online bolt, ahol kapható). Nekem, kezdőnek tökéletesen megfelel, a mellékelt cd-rom tartalmazza a windozos Qt-t (+designer es linguist ÉS asszem CSAK free progik irasahoz hasznalhato), MSVC, illetve Borland 5 es 6-hoz telepitheto formaban.

Üdv!
Elkezdtem ismerkedni a QT-val, és a QT talán legizgalmasabb részével a signal-slot modellel.
Sajnos belefutottam egy kis problémába már a legelején! Deffiniáltam saját slot-ot, de ha meg akarom hívni akkor sajna nem megy.

Ezt csináltam:

Csináltam egy kis programocskát kdevelop-al
(Új projektbe raktam, C++/qmake)

A forrás kód:
[code:1:05c4e319b5]
#include <qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
#include <iostream>

class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
public slots:
void Gomb1LE();

};

MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

QPushButton *gomb1 = new QPushButton( "Gomb1", this, "gomb1" );
gomb1->setGeometry(40,40, 75, 30 );
connect( gomb1, SIGNAL(clicked()), this, SLOT(Gomb1LE()) );
}

void MyWidget::Gomb1LE()
{
std::cout << "Le";
}

int main(int argc, char *argv[])
{
QApplication a( argc, argv );
MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}

[/code:1:05c4e319b5]

A Quit gombomat ezt összekötöttem és ez jól is működik, viszont a Gomb1 hiába kattintok nem történik semmi
jobban mondva indítás után ez jelenik meg a konzolon:
[code:1:05c4e319b5]
QObject::connect: No such slot QWidget::Gomb1LE()
QObject::connect: (sender name: 'gomb1')
QObject::connect: (receiver name: 'unnamed')
[/code:1:05c4e319b5]
Nem értem, deffiniálva van össze van kötve a connect fügvénnyel és még sem!
Ötlet?

Ejnye ejnye, kedves Kagy. ;-) Es a dokumentaciot ki fogja olvasni?

Minden osztalynak, amelyik signalt vagy slotot deklaral, tartalmaznia kell a Q_OBJECT makrot. Ennek oka van, de hogy mi is ez pontosan, annak kideriteset hazi feladatnak feladom. ;-)

[quote:ba28522151="gyomber"]A Pythonról azt hallottam, hogy nem lehet az általam fejlesztett kódot nem tudom elrejteni a felhasználó elöl. Ha ez igaz, akkor meg hogyan tudom megvédeni a szellemi termékem. Fogja, kicsit átírja aztán továbbadja... Ez valahogy nem kóser. Vagy én tudom rosszul a dolgokat... Ezért is maradtam egyenlőre a Kylix-nál. Nem tul stabil az IDE, de gyorsan lehet vele fejlesztgetni :roll: :roll: :roll:[/quote:ba28522151]

Javaslom olvasd el E.S.R.: A katedrális és a bazár című könyvét!

Bajusz Tamás

Ha cross-platform GUI appot akarsz, én a wxWidgets-et ajánlanám, azok alapján, amit olvastam róla. A QT is jó, a mysqlcc-t (mysql DB admin kliens)is abban írják a fejlesztők.

Ha cross-platform progit akarsz, akkor legyen minél kisebb és kevesebb függősége == sok munka.

Ez az FLTK cool!

Hi!

Az előzőekre visszatérve: Én fejlesztettem(tek jelenleg is) több olyan programot, amely QT könytvárt használ, és multiplatformos. A QT-nak a 4. verszioja GPL lesz windows alatt is, ha jol ertettem..., de addigis marad a 2.3.0 NonCommercial változat :lol: (jelenleg ezt hasznaltam w$ alatt) Kitunően működik, kis odafigyeléssel 100% multiplatformos progit lehet elérni forráskód szinten. Egy két kissebb #ifdef ..#elsif #endif persze van a programban, de minimális és ezek sem a QT környezettel kapcsolatosak.

És nem cygwin-el, hanem MSVC++ al müxik, ami nativ villamgyors kódot készít.
Ha valakit érdekel egy példa http://cdcat.sf.net

goldberg:

A Q_OBJECT nem tölti fel a korstuktor paraméterlistáját értékelkkel. A definicióban (mint az látható) a paramétereknek alapértelmezetten NULL az értékük. Ez az érték helyettesítődik be, ha nem írsz oda semmit híváskor (Ezt a C++ csinálja)
Ez widget esetében annyit jelent, ha a parent (szülő) NULL akkor a widget nek nincs szülője azaz ő a főablak a programodban. Amennyiben meghadsz ilyen paramétert az egy másik widget-nek a címe kell, hogy legyen, és ebben az esetben már az új widget az előző gyermeke lesz. (Pl ha a szülőben close()-t hivsz a gyerek bezarodik, de forditva nyilvan nem)

A name paraméterrel meg a widget előre (valszeg designerben) beállítortt nevét definiálhatod fölül, ha akarod

Ha meg két főablakot akarsz akkor két widget-et indíts parent=NULL al.
Valamilyen módon (legjobb lenne metódusokkal) gondoskodj arról, hogy tudjanak is egymasról. :lol:

goldberg:

A konstruktorban minden parameter utan ott van a default ertek, ezek helyettesitodnek be, ha nem adsz meg semmilyen parameterezest neki. Az ablakok konstruktorainak parameterezeserol szerintem probalj meg a qt dokumentacioban keresni - az ilyen jellegu doksik kozul az egyik legjobb -, illetve a trolltech.com-on a levlista archivumban (qt-interest) is hasznos dolgokat talalni. :wink:

hyper80:

En 1-2 hete 3.3.3 qt-t hasznalok windows alatt, koszonhetoen a kde-cygwin projekt munkajanak. Amit kihagytak, az a 3.2.1-es non-comm. qt-hoz mellekelt visual studio plugin, amit mult heten sikerult 'portolni' 3.3.3 ala. Amennyiben a lincenszelessel kapcsolatban nem valaszol a trolltech meg tovabbi 1 hetig, ugy valahova kiteszem a forrast+patchet, hatha mas is hasznat veszi. Akit erdekel: [url]http://kde-cygwin.sourceforge.net/qt3-win32/[/url]

[quote:4fd161cbb8="kagy"]Szóba jött természetesen a Kylix/Delphi páros is, amit ajánlotatok is, de személy szerint akkor már inkább QT és C mint Kylix és pascal.
[/quote:4fd161cbb8]

csak halvány megjegyzés: kylix-nél választhatsz, hogy pascal vagy c++, mindkettőt használhatod.

de valóban, a Kylix elég hamvábaholt dolognak tűnik, szerintem a Borlandnak nincs rá elég erőforrása, hogy folytassa, úgyhogy lehet hogy elhal az egész... kár... a Qt viszont él és virul.

Hello, bocs ha láma dolgot kérdezek, de nem értek valamit a címben szereplő álomtrió működésében.

Létrehozok egy KDE Application projectet. Szépen elkészül a 3 file (main.cpp, teszt.cpp, teszt.h). Ahogy annak rendje és módja szerint kell hozzáadok egy .ui widgetet, megtervezem QTDesignerben, szépen SINGNAL-SLOT összerendeléseket is megcsinálom. Irány vissza a KDevelopba, a subclass varázslóval "bedrótozom" a most létrehozott formot. Automake, configure, install, build és megy minden szépen.

Eddig minden szép és jó, de van egy dolog amit sehogysem tudok megérteni. Ha belenézek a .h állományokba akkor végig azt látom, hogy a konstruktorok rendre

( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 )

módon vannak felparaméterezve.

Amikor megtörténik a példányosítás a main.cpp-ben akkor sehol egy árva paraméter sincs megadva?!

Akkor hogy is van ez pontosan????

Időközben próbálgattam mit történik akkor, ha a példányosításnál megadok valamilyen paramétert. Mondjuk egy számot. Nos azt tapasztaltam, hogy ekkor valamilyen más / semmilyen konstruktor (elég hülyén hangzik) fut le mert nem ugyanúgy jelenik meg az ablak. Szóval szvsz a Q_OBJECT makró végzi el a megfelelő paraméterezést? De akkor hogyan tudok olyan osztályt / konstruktort csinálni, ami valamilyen paramétert is kaphat. Pl egy másik alblak referenciáját????

(Értsd: szeretnék egy olyan progit, amiben van 2 ablak (függyetlenek!) de a főablaknak lenne egy refije a másik ablakra és ha a főablakon kattintok egy gombra akkor signal-slot kapcsolaton keresztül bezárja a másik ablakot)

Azt hiszem időközben megtaláltam a megoldást???
Kérem aki jártasabb a témában az erősítsen/cáfoljon meg, hogy minden világos legyen.
Szóval a Q_OBJECT makró megcsinálja a konstruktor paraméterezését, ezt fogadjam el így. Ha meg akarok valami paramétert átadni akkor írjak hozzá metódust amin keresztül ezt megtehetem. Ha meg gyerek ablakot akarok akkor azt hozzam létre a szülőben. Éljen az OO :)

Hi!

Személyesen nekem jobban tetszik a QT + MSVC párosítás mint a QT+cygwin. Nem csak a gyorsaság minatt (Mert azt nem is igazan teszteltem csupan ugy hallottam lassabb) hanem a nagyobb ok az, hogy a cygwin hez telepiteni kell egy teljes kornyezetet, nem csak a forditashoz, hanem a puszta futtatáshoz is. Na most az MSVC vel forditott progik nativ kodjat minden + segitség nélkül futtatja bármely window$ és igy nekem csak a qt környezet futtatásához szükséges 2 db (1.5Mb) dll-t kell mellékelni ha valakinek oda akarom adni a progimat tesztelésre :-)
Ha jol sejtem a cygwint viszont telepíteni kell.
+ido, +macera,+helyfoglalas és nem biztos hogy mindenkinek akinek odaadod a progid kedve lesz hozzá.

De ha tevednek a cygwinnel kapcsolatban, javitsatok ki, eleg regen hasznaltam mar...

+Igaz, hogy azzal egyutt kapok csomó hasznos eszközt linux-parancsot, de én ezt a hiányt úgy pótolom, hogy Linux alatt fejlesztek, aztán ha megvan, kód->copy, boot-m$ win,compile, és örül
:lol: