Portál AbcLinuxu, 30. dubna 2025 16:49
+1 Taky držím palce a doufám že z toho bude seriál (aby to nezůstalo u návodu typu "uděláme si okno s tlačítkem", kterých je všude spousta).
Zajímavé by bylo i porovnání dvou přístupů signály+sloty vs. posluchače (např. v Javě -- ve Swingu).
+1 tiez vazne potrebujem , miestami som sa rozhodoval ze pre svoju linuxovu verziu programu neurobim gui nakoniec som neurobil ani na win a je to iba konsole :)
S Qt trosku experimentuji, takze se tesim na pokracovani, ze se dozvim neco noveho, zajimaveho
Konečně jsem se dočkál :). Díky za skvělý seriál. Už se nemůžu dočkát dalšího dílu.
MyObject(QWidget* parent = 0);
C++ umí výchozí hodnoty argumentů?
V uvode by som este rozpisal, ktore subory treba downloadnut aby som mohol zacat robit QT sw.
A co tak original baliky z http://www.qtsoftware.com/downloads/opensource/appdev/linux-x11-cpp
Myslim ze to je univerzalnejsie riesenie.
Konecne neco zajimavyho - super clanek
Jak jsem již psal, libovolnou třídu Qt můžete zdědit a upravit si ji podle sebe. V následujícím příkladu vytvořím třídu MyObject založenou na QWidget, která poslouží jako hlavní okno programu.Možná by bylo vhodnější začít rovnou hlavním oknem založeným na QMainWindow...
Qt jsem uz vicekrat pouzil a opravdu se mi libi, sloty jsou sice zasah do syntaxe C++, ale je to elegantni.
Qt miluju a dela z C++ dobrou platformu, naopak MFC pro Windows nenavidim.
Radeji delam GUI programy v Jave nebo kdyztak v C#, ale pouziti Qt s C++ je stejne elegantni.
kdyz uz jste to s temi sloty nakousl - prepisovani anglickych podkladu do cestiny je zasluzna prace, ale vede to k tomu, ze se nedovime, proc je signal/slot mechanismus elegantni a jake vyhody a nevyhody ma vuci jinym mechanismum jako napr. target/message a callback. Ale mozna se to dovime v diskuzi.
nejde mi o prepisovani dokumentace ani o rozvlacne popisy.
pouze jsem z pohledu nekoho kdo Qt uz pouzil sdelil svuj dojem,
ze sloty/signaly jsou v Qt pekne udelany a libi se mi, tedy
ze Qt doporucuji oproti jinym C++ frameworkum.
Mně se zase víc líbí posluchače (Java -- Swing), kromě jiného kvůli nim není potřeba ohýbat daný jazyk. Ale ty sloty+signály mají taky něco do sebe.
Veľmi pekné, len vydrž a namiesto jedno a dvojslabičných premenných daj radšej celé názvy, vždy je zrozumiteľnejšie window ako w, teraz je to v poho ale v ďaľších dieloch by sme sa v tom mohli stratiť :)
Super! Už se těším na další díly.
Setkal jsem se s tím v GTK++ a vidím stejnou věc i tady. Z jakého důvodu se třídy oken, tlačítek a jiných prvků dědí, místo aby se paramertizovaly jejich instance?
to samé wxWidgets, jestli se nepletu
Qt 4 běží nejen na unixových operačních systémech (Linux, BSD), Windows a Mac OS X, ale i na nejrůznějších mobilních zařízeních.
Spíš by bylo vhodnější do toho nějak zakomponovat to, že Qt nevyžaduje ke svému běhu X Window System. Ale jinak moc pěkné.
No já se zaměřoval na běh v těch mobilních zařízeních. To kde to je jede je vcelku irelevantní když se jedná o OSS.
Qt::RightButton or Qt::RightButton
bude nějaká vypečená programátorská konstrukce.
#define or ||2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéž
Me houpat muzes, ale ctenari stejne odhali, ze tam ma byt
Qt::RightButton or Qt::MidButton
Oprava: Tedy ma tam byt jen ten jeden Qt::RightButton, resp. kdyz uz mermomoci chces or, tak
if(e->buttons() == (Qt::LeftButton or Qt::MidButton))
if(e->buttons() & (Qt::LeftButton | Qt::MidButton))
QMouseEvent::buttons()
.
Jak ted na to koukam, tak jsem ani nemyslel, co jsem napsal. Blamage.
Ne.
2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéžTo mi není jasný. Výraz
(Qt::RightButton or Qt::RightButton == Qt::RightButton)
nebude true
?
2) buttons() odpovídá logický disjunkci (prostě OR) těch 2 (při doubleClicku) tlačítek, proto je tam 2x totéžTak to teda nechápu. Co přesně že tam má to OR dělat?
Tohle mě docela dostalo. Celkem nedávno jsem hledal platformu pro grafické aplikace v C++ a (já vůl) si vybral zastaralé wxWidgets. Mimo to že jsou nadstavbou GTK (a tedy jsou dost pomalé), zásah do syntaxe C++ je tu ještě větší. A propos, dostal mě ten "Hello world" na snad 20 řádků? Podobná "ukázka" ve wxWidgets si délkou nezadá z helloworldem pro čisté Win API
Nechci byt hnidopich, ale nenazyval bych to "grafickym programem", ale spis "programem s grafickym uzivatelskym rozhranim". Pravda, je to dlouhe, ale presnejsi. Preji hodne stesti, ja bych si o Qt neodvazil psat, je toho dost a zase tak dobry Qtista nejsem :D Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?
Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?
Proč?:
…selected features will be migrated into the Qt framework which will result in Qt becoming an even richer, cross-platform application framework.
Jinak nam dnes zabili Qt Extended, hodlam forkovat, kdo se prida?
Podívej se http://www.abclinuxu.cz/openmoko Jsou tam odkazy na trac a GIT. Už jsem se přidal a užívám si QTE bez ozvěny :)
Pamatuje ještě dokumentaci k Turbo Pascalu? V ní se mluvilo i o "hromadě".
Pascal, hromada čeho?
Jenže překládat Big Ben by bylo jako překládat Jardík (vlastní jméno), zatímco ostatní podstatná jména se normálně překládají (mouse → myš, class → třída atd.)
Ve Win je funkce HeapAlloc a né HaldaAlloc či HromadaAlloc a proto je to heapA podle Céčka je to zase m, s touhle argumentací běž do háje.
Akorát místo "ve stacku" a "v heapu" se v češtině používá "na zásobníku" a "na haldě".Obávám se že teď někoho naštvu, ale hlasoval bych spíš za počešťování anglických názvů než za doslovné překládání. Když se člověk naučí něco z českého návodu a pak pak třebas hledá konkrétní řešení v anglických diskusích, tak aspoň hned ví co je co, i když není zrovna expert. Podle mě je to obohacení češtiny a považuji to za normální - je to o zvyku, "profesionál" nebo "informatik" taky už dnes nikomu nepřijdou divné. Těším se na další pokračování, taky doufám že z toho bude telenovela o Qt - to téma má velký potenciál a mohlo by vydržet opravdu na dlouho.
Mockrát děkuji za článek a také doufám, že z toho bude megaseriál.
Taky mockrát díky za seriál.
Jsem tzv. věčný začátečník a tohle mě určitě znovu nakopne něco se naučit.
Máte někdo praktické zkušenosti s Qt Creatorem? Konkrétně s verzí 1.0.0?
Chtěl jsem jen vědět od někoho erudovaného a kovaného v QT jak je tahle jedničková verze použitelná pro běžného C++ a QT BFU .
Líbí se mi hlavně spolupráce s integrovaným Qt designerem. Jeden čas jsem zkoušel Eclipse a Codeblocks a trápil jsem se s nastavením cest a parametrů.
Tady je vše celkem přehledné a jasné . Ale jak říkám, jsem věčný začátečník a každopádně vítám tenhle seriál a těším se na další pokračování. Nezlobil bych se kdyby
byly další díly trošku "upovídanější" a "polopatičtější pro nás pomaleji chápající .
Chtěl jsem jen vědět od někoho erudovaného a kovaného v QT jak je tahle jedničková verze použitelná pro běžného C++ a QT BFU.
Ohledně QT jsem úplný BFU, ale snad tím spíš můžu říct, že právě pro BFU je Creator použitelný velmi dobře. Hlavně není potřeba nic konfigurovat, prostě vše funguje.
Jeden čas jsem zkoušel Eclipse a Codeblocks a trápil jsem se s nastavením cest a parametrů.Jj, to byl dost děs. Pužíval jsem Code::Blocks než vytvořili QtCreator a doplňování QTříd mi nikdy nefungovalo 100%. No Qt Creator to pořešil. Taky je na něm dobrý, že se do něj dá nastavit vícero verzí Qt a u každého projektu kdykoli zvolit proti které verzi se má kompilovat.
Jen dodam, ze klicova slova signals
a slots
v hlavickovych souborech stejne jako emit
v implementaci je vhodne nahrazovat makry Q_SIGNALS
, Q_SLOTS
a Q_EMIT
. Umozni to pozdeji pouzit zdrojaky v projektech se signal/slot mechanismy tretich stran. V nejhorsim pripade budou tyto makra alespon viditelnejsi v editoru, ktery zvyraznuje syntaxi C++, ale nezna klicove slova Qt (cili vetsina).
Jo jo, takovejch projektů už jsem viděl, co v nich nemělo valnej smysl od začátku používat logckéa rozumné věci ...
QApplication app(argc, argv); MyWindow w; w.show(); // qApp je globální ukazatel na instanci QApplication // qApp->exec() je zde totéž jako app.exec() return qApp->exec();To nevypadá thread-safe. Když před řádkem
QApplication app(argc, argv);
vytvořím nový thread a v něm zavolám qApp->exec() tak se to asi může pokakat jestli se qApp nastaví až v konstruktoru QApplication.
QObject(0x0)
, takže tak. Nespadne to, ale řekne to
QApplication::exec: Please instantiate the QApplication object first
qApp->exec()
místo app.exec()
Abys nemusel tahat ukazatel na lokalni promennou fce main() po cele aplikaci jako argument vsech metod? Je to bezpecne minimalne pro cteni.
Nicmene prima zmena vlastnosti tridy QApplication z vice vlaken soucasne by mohla natropit vice skody nez uzitku, v dokumentaci totiz neni zminka "vlaknove bezpecnosti" (zdrojaky ted nemam k dispozici). Bezpecnou cestou je uziti signal/slot mechanismu mezi vlakny a napojit tak napr. QTimer s nulovym intervalem na slot QApplication (tech je ale dost malo, protoze vetsina metod je statickych )
kedy sa mozeme tesit na dalsi diel serialu ?
Tak som stravil 10 minut hladanim, ako skompilovat hello world a zistil som, zetreba pouzit qmake-qt4 namiesto qmake, v opacnom pripade nevedel najst hlavickove subory. Mozno tato informacia usetri cas podobnemu totalnemu zaciatocnikovi ako som ja :)
A pokud máte stejné distro jako já, výchozí qmake se nastavuje tímhle příkazem:
sudo update-alternatives --config qmake
connect není metoda, ale makro, ale to je jen kosmetika :)
Nechce se mi to googlit, ale prostě vím, že je to makro. Jediné čím ti to mohu podložit jsou má vysokoškolská skripta a náš doktor informatiky programuje asi 15-20 let, takže bych tam chybu neviděl
Není třeba to googlit nebo hledat, je to jen slovíčkaření- jedná se o vnitřní implementaci. Voni do dokumentace to asi píšou pro pochopení ne pro super přesnost, či jak to vnitřně implmentují... Je to třeba jako ve WindowsAPI MessageBox to je taky makro, které se rozvine do MessageBoxA (ANSI verze), MessageBoxW (Unicode verze). Ahoj
static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member ...Časť hlavičkového súboru qobject.h, connect je skutočne metóda, makrá sú SIGNAL a SLOT.
tak mi to nedalo a prolezl jsem celou tu kapitolu ve skriptech a je tam na dvou místech: makro i metoda, takže se zdá se vloudila malá chybička a já vás tu tedy prudím... ale to neva, alespoň to pomohl k objevu chyby :o)
mybutton.h
, mybutton.cpp
a main.cc
jsem vložil obsah z článku, spustil jsem
qmake -project qmake makea přeložilo se to bez problémů.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.