abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:22 | Zajímavý článek

    Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.

    Ladislav Hagara | Komentářů: 1
    dnes 03:33 | Zajímavý software

    AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.

    Ladislav Hagara | Komentářů: 1
    dnes 00:11 | Nová verze

    Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | IT novinky

    Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou

    … více »
    NUKE GAZA! 🎆 | Komentářů: 6
    včera 16:33 | Zajímavý projekt

    Patchouli je open source implementace EMR grafického tabletu (polohovací zařízení). Projekt je hostován na GitLabu.

    Ladislav Hagara | Komentářů: 0
    včera 14:11 | IT novinky

    Český Nejvyšší soud potvrdil, že česká právní úprava plošného uchování dat o elektronické komunikaci porušuje právo Evropské unie. Pravomocným rozsudkem zamítl dovolání ministerstva průmyslu a obchodu. To se teď musí omluvit novináři Českého rozhlasu Janu Cibulkovi za zásah do práv na ochranu soukromí a osobních údajů. Ve sporu jde o povinnost provozovatelů sítí uchovávat údaje, ze kterých lze odvodit, kdo, s kým a odkud komunikoval.

    Ladislav Hagara | Komentářů: 10
    včera 02:11 | Komunita

    Google bude vydávat zdrojové kódy Androidu pouze dvakrát ročně. Ve 2. a 4. čtvrtletí.

    Ladislav Hagara | Komentářů: 0
    7.1. 17:22 | Zajímavý článek

    Bezpečnostní specialista Graham Helton z Low Orbit Security si všímá podezřelých anomálií v BGP, zaznamenaných krátce před vstupem ozbrojených sil USA na území Venezuely, které tam během bleskové speciální vojenské operace úspěšně zatkly venezuelského diktátora Madura za narkoterorismus. BGP (Border Gateway Protocol) je 'dynamický směrovací protokol, který umožňuje routerům automaticky reagovat na změny topologie počítačové sítě' a je v bezpečnostních kruzích znám jako 'notoricky nezabezpečený'.

    NUKE GAZA! 🎆 | Komentářů: 11
    7.1. 06:11 | Nová verze

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,58 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,32 %. Procesor AMD používá 67,43 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 4
    7.1. 05:55 | IT novinky

    V Las Vegas probíhá veletrh CES (Consumer Electronics Show, Wikipedie). Firmy představují své novinky. Například LEGO představilo systém LEGO SMART Play: chytré kostky SMART Brick, dlaždičky SMART Tagy a SMART minifigurky. Kostka SMART Brick dokáže rozpoznat přítomnost SMART Tagů a SMART minifigurek, které se nacházejí v její blízkosti. Ty kostku SMART Brick aktivují a určí, co má dělat.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (2%)
     (5%)
     (0%)
     (9%)
     (21%)
     (4%)
     (5%)
     (3%)
     (11%)
     (54%)
    Celkem 311 hlasů
     Komentářů: 7, poslední včera 15:35
    Rozcestník

    Začíname KProgramovať - V

    28. 2. 2003 | Ondrej Krsko | Programování | 9632×

    Architektura Document-View: Menu, nástrojová lišta, hlavní okno, stavový řádek. Jednoduchý kreslící program.

    Model Dokument - Pohľad

    V tomto dieli sa zameriam na jednu metódu ako tvoriť aplikácie. Je pomenovaná "Document-View Model". Jedná sa o pomerne rozšírenú metódu. Možno ju už poznáte (Windows programátori napríklad z knižnice MFC od Microsoftu). Napriek tomu nezabudnem na ostatných a všetko pekne poporiadku vysvetlím.

    Na začiatok trošku teórie. Ako príklad si vyberiem jednoduchý textový editor. Poskytuje užívateľské rozhranie na editáciu textu (to asi nikoho neprekvapí:-)). Predstavme si, že vyzerá takto:

    • Menu: poskytuje prístup ku väčšine funkcií ako napríklad otváranie súborov alebo vyhľadávanie v texte.
    • Nástrojová lišta (toolbar): zrýchlený prístup k často používaným funkciám.
    • Hlavný pohľad: priestor, kde je možné editovať text.
    • Stavový riadok

    Hlavný pohľad je najdôležitejšia časť celej aplikácie. Určuje, na čo sa aplikácia bude dať použiť (viete si určite predstaviť aj grafický editor s podobným rozdelením, tabuľkový procesor, internetový prehliadač, atď). Na veľa jednoduchších programov možno použiť už existujúci ovládací prvok (napríklad HTML prehliadač). Zväčša sa ale nevyhneme tvorbe nových tried. Často je možné skombinovať tieto dva prístupy dokopy a použiť dva rôzne pohľady.

    Prečo sa ale celý model nazýva Document-View? Zrejme je už asi jasné, že bude existovať ešte jedna trieda - Document. Možno sa pýtate načo? Keby chcel užívateľ pracovať s dvoma rôznymi pohľadmi, možno vytvoriť dva oddelené pohľady. Čo ale v prípade, keď tieto dva pohľady majú byť synchronizované. Pri zmene v jednom pohľade by mal druhý dostať informáciu o nej a aktualizovať svoj obsah (jedná sa o pomerne častý program, napríklad HTML editor). Document-View architektúra to rieši rozdelením "problému" do dvoch tried:

    • Dokument udržiava informácie o dátach a umožňuje pohľadom ich zmenu.
    • Pohľad zobrazuje dáta a posiela dokumentu ich zmeny.

    Využitím tried predpripravených KDE a Qt programátormi si uľahčíme veľa práce. Aj keď sa Vám teraz možno zdá zbytočné postupovať akousi okľukou cez Dokument, časom zistíte, že v zložitejších programoch tým len získate. Hoci na zobrazované dáta budete potrebovať len jeden pohľad, model Document-View Vás donúti použiť správny návrh tried. A ako vieme, dobre urobený návrh je často veľkým krokom k funkčnému a ľahko rozširovateľnému programu.

    Vlastná trieda View

    Všeobecných informácií by už bolo aj dosť, poďme radšej niečo vytvoriť. Potrebné bude naimplementovať potomka triedy QWidget a prepísať niektoré virtuálne metódy na spracovanie udalostí. Takisto vytvoríme niekoľko slotov, ku ktorým potom bude možné pristupovať cez menu. Na začiatku si treba premyslieť, s akým typom dát má aplikácia pracovať. Potom treba určiť, ako bude View zobrazovať údaje a ako ich bude Document ukladať a načítavať.

    A teraz sa už konečne pustíme do programovania, aj keď nie tak celkom. Začiatok za nás spraví KDevelop. Vytvorte nový projekt typu "KDE Normal". Ja som ho pomenoval Serial2. Po dokončení generovania môžete porovnať vytvorené súbory a triedy s tými zo Serial1. Určite si všimnete, že Application Wizard nám vytvoril tri triedy:

    • Serial2App: potomok triedy KMainWindow. Vytvorí celé užívateľské prostredie (menu, toolbar, statusbar, atď). V menu sú predpripravené všetky najčastejšie používané funkcie, ako Open, Save...
    • Serial2Doc: dokument, tak ako som ho popísal vyššie. Pripravené sú napríklad metódy newDocument(), saveDocument(), atď.
    • Serial2View: trieda odvodená od QWidget (aj keď predka možno zmeniť, ak to budete považovať za potrebné). Pripravené metódy sú napríklad getDocument() a print().

    Skúste teraz program skompilovať a spustiť. Ak máte všetko správne nastavené, malo by sa zobraziť okno ako na obrázku (a to sme ešte nič nenapísali). Vyskúšajte viaceré položky z menu. Niektoré zatiaľ vôbec nereagujú, iné sú už pripravené ako napríklad otvorenie súboru.

    Rozhodol som sa, že si vytvoríme jednoduchý program na kreslenie. (Je to akási obdoba Hello World programu pri vysvetľovaní Document-View architektúry). Najprv doprogramujeme všetko potrebné do triedy Serial2View. Zrejme budeme musieť sledovať:

    • stlačenie tlačítka myši: virtuálna metóda mousePressEvent()
    • pohyb myši tlačítka myši: virtuálna metóda mouseMoveEvent()
    • uvoľnenie tlačítka myši: virtuálna metóda mouseReleaseEvent()

    QPainter

    Pozornosť si zaslúži aj trieda QPainter. Trieda ponúka optimalizované funkcie na grafické operácie, ktoré bude potrebovať pri práci s GUI. Dokáže kresliť všetko od bodov, čiar až po komplexné geometrické útvary. Tiež dokáže pracovať s textom. Medzi často používané funkcie patria:

    • drawPoint(): funkcia vykreslí bod, ako parameter očakáva súradnice.
    • drawPoints(): na vstupe dostane pole bodov.
    • drawLine(): nakreslí čiaru podľa zadaných súradníc
    • drawRect(): obdĺžnik.
    • drawRoundRect(): parametre sú obdobné ako pri funkcii drawRect(). Posledné dva ale určujú polomer zaokrúhlenia.
    • drawEllipse(): elipsa.

    Všetky tieto funkcie očakávajú ako parametre integer. Farbu, hrúbku pera a ďalšie vlastnosti sa neodovzdávajú priamo pri volaní týchto funkcií. Zmeniť ich môžete pomocou špecializovaných metód, napríklad setPen().

    Ďalšie funkcie umožňujú prácu s obrázkami. Spomeniem napríklad drawPixmap(), drawImage() a drawTiledPixmap(). Ďalšie informácie možno nájsť v dokumentácii. Písanie textov je možné vďaka funkcii drawText().

    Obsluha udalostí

    Otvorte serial2view.h a pridajte do neho tieto riadky: (samozrejme do deklarácie triedy Serial2View)

    1. protected:
    2. virtual void mousePressEvent( QMouseEvent );
    3. virtual void mouseReleaseEvent( QMouseEvent * );
    4. virtual void mouseMoveEvent( QMouseEvent * );
    5. private:
    6. bool mousePressed;

    A do serial2view.cpp pridajte implementáciu troch metód:

    1. void Serial2View::mousePressEvent( QMouseEvent *e )
    2. {
    3. mousePressed = true;
    4. }
    5.  
    6. void Serial2View::mouseReleaseEvent( QMouseEvent *e )
    7. {
    8. mousePressed = false;
    9. }
    10.  
    11. void Serial2View::mouseMoveEvent( QMouseEvent *e )
    12. {
    13. if (mousePressed)
    14. {
    15. QPainter paint( this );
    16. paint.setPen( Qt::blue );
    17. paint.drawPoint( e->x(), e->y() );
    18. }
    19. }

    Program môžete spustiť. Určite si ale všimnete pár nedokonalostí. Ak napríklad okno zminimalizujete a potom znova obnovíte (jednoducho povedané, prinútite systém k prekresleniu plochy programu), nakreslený obrázok sa stratí.

    Upravíme teda metódu mouseMoveEvent() tak, aby si pamätala, čo užívateľ nakreslil. Presnejšie povedané, začne spolupracovať s dokumentom, ktorý sa stará práve o takéto veci. V mouseMoveEvent() povie dokumentu o všetkých zmenách. V novej metóde paintEvent(), ktorá je vyvolaná pri potrebe prekresliť prvok sa zase dokumentu opýtame na aktuálne údaje a zobrazíme ich. Aby bol program "čistý", nenecháme počiatočnú hodnotu premennej mousePressed na náhodu a priradíme do nej false. V konštruktore si takisto odovzdáme ukazovateľ na dokument, inak by sme s ním nemohli pracovať. Všetky tieto zmeny si môžete stiahnuť tu (845 kB).

    Nová metóda mouseMoveEvent() si zaslúži krátky popis. Riadok číslo 15 z predchádzajúceho výpisu je nahradený riadok:

    1. QPainter paint( &doc->buffer );

    Rozdiel je v parametri QPaintDevice. Pôvodne sme odovzdávali ako parameter samotný objekt Serial2View. Teraz je nahradený triedou KPixmap. Sem dokreslíme novú čiaru, a potom volaním bitBlt() skopírujeme celý jej obsah na Serial2View.

    Použitím KPixmap sa objavil ďalší problém. Jeho veľkosť napevno nastavujem v Serial2Doc::newDocument(), čo nie je celkom správne. Jeho veľkosť sa musí prispôsobovať veľkosti okna. Musíme teda pridať ešte jednu metódu reagujúcu na zmenu veľkosti:

    1. void Serial2View::resizeEvent ( QResizeEvent *e)
    2. {
    3. QWidget::resizeEvent( e );
    4. int w;
    5. if (width()>doc->buffer.width()) { w = width(); } else { w = doc->buffer.width(); }
    6. // ak oblubujete skratene zapisy:
    7. int h = height() > doc->buffer.height() ? height() : doc->buffer.height();
    8. QPixmap tmp (doc->buffer);
    9. doc->buffer.resize(w, h);
    10. doc->buffer.fill( Qt::white );
    11. bitBlt( &doc->buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() );
    12. }

    Na začiatku zavolám obsluhu udalosti u predka. Potom vypočítam veľkosť obrázku. Ak sa okno zmenšuje, veľkosť obrázku sa nemení (aj keď časť obrázku nebude vidno). Ak sa veľkosť okna zväčšuje, treba prispôsobiť aj veľkosť bufferu. Vypočítane hodnoty sú uložené v premenných "w" a "h". Opäť môžete program spustiť a skontrolovať zmeny.

    Nabudúce...

    Nabudúce sa pozrieme na triedu Serial2Doc. Program bude schopný ukladať nakreslený obrázok a takisto aj otvárať existujúce z disku. Rozšírime ho o niekoľko jednoduchých funkcií (kresliť čiary je v dnešnej dobe trošku primálo:-).

           

    Hodnocení: 36 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    28.2.2003 11:36 misso
    Rozbalit Rozbalit vše Document View
    myslite, ze Document View ma nejaku buducnost? nie je skor zaujimavejsie orientovanie sa na komponenty tak ako je to v Delphi, Kylixe alebo novom .NET ???
    1.3.2003 23:30 pf
    Rozbalit Rozbalit vše Document View
    Jak to presne myslite "orientovat se na komponenty"? Neco jako system - vezmu komponentu z palety, mrsku s ni na formular poklikam cosi a mam vysledek jaky (zrovna) chci?
    2.3.2003 17:11 misso
    Rozbalit Rozbalit vše Document View
    ano, presne tak. a komponenty su navyse znovupouzitelne, nie ako nejaky view alebo document.
    28.2.2003 13:09 mato
    Rozbalit Rozbalit vše help
    cafte, mam takyto problem: ked chcem v kdevelope vytovorit novy projekt a na konci sprievodcu novym projektom kliknem na create tak mi vypise nasledujucu hlasku: configure: error: Qt (>= Qt 3.0.2) (library qt-mt) not found. Please check your installation! For more details about this problem, look at the end of config.log. Make sure that you have compiled Qt with thread support! warning: Serial1 inherits unknown class 'QWidget' QWidget hasn't a reference. at /usr/share/kdoc/kdocHTMLutil.pm line 576, line 39. QWidget hasn't a reference. at /usr/share/kdoc/kdocHTMLutil.pm line 576, line 39. pritom som qt kniznicu aj nanovo instaloval. neviete mi poradit co to znamena. Mam Mandrake 8.2, KDE3, QT2 aj QT3. dik za radu.
    Jiří Hubka avatar 3.3.2003 07:44 Jiří Hubka | skóre: 17
    Rozbalit Rozbalit vše help
    A nemenil jste kompilator napr. na verzi gcc3.x.x ?
    3.3.2003 09:55 mato
    Rozbalit Rozbalit vše help
    ale ano menil, pouzival som gcc-2.96, teraz pouzivam gcc-3.0 a g++-3.0, g++-2.96 mi vypisovalo chybove hlasky, ked som pouzival triedu ios_base.
    23.6.2003 15:14 kmana
    Rozbalit Rozbalit vše pokračování ?
    Bude někdy pokračování ? Seriál je celkem povedený a přínosný
    12.8.2003 15:11 Radim Burget
    Rozbalit Rozbalit vše Dokumentace
    Super, nejlepsi tutorial co sem cet... Co takhle v pristim dile nejak rozumne vysvetlit jak se pohybovat v refernecni prirucce KDE a jak hledat jine informace? Myslim, ze by to spousta zacatecniku ocenila.
    15.2.2007 09:07 Vit
    Rozbalit Rozbalit vše Re: Začíname KProgramovať - V
    Muzete mi prosim poradit ? Pouzivam SUSE 10. a tam v KDevelop neni moznost vyberu "KDE Normal", pouze "Application framework". Ten kdyz pouziji a pridam vse v clanku popsane, tak mi program na mys nereaguje a nic nekresli. Muzete mi poradit jakou verzi KDevelop pouzivate ? Pripadne jaky system ? Pripadne kde by se daly najit zdrojove kody aplikace Serial2 vcetne toho projektu najit ?

    Zkousel jsem tento problem resit ale bezuspesne. Zrejme je problem uz v tom "Application framework" Ale nevim jaky.
    4.12.2007 18:34 fany
    Rozbalit Rozbalit vše Re: Začíname KProgramovať - V
    Ahojte mam problem s dokumentaciou ked dam search tak mi to vypise Cannot find htsearch executable. Ako som pochopil chyba mi nejaky balik ale neviem aky? Ake baliky by bolo dobre si nainstalovat aby som mal plne funkcnu dokumentaciu s vyhladavanim?

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.