QT tip #1 - Průhlednost obrázků

July 9, 2007 on 3:59 pm | In Programing, Poznámečky | 1 Comment

Začíná můj osobní nepravidelný mini seriál, kde si hodlám zapisovat poznámky o specifických činnostech v QT frameworku. Ano vím - všechno se lze dočíst v dobře a přehledně napsaném manuálu, ale kdo to má v něm pořád hledat? :-)

Výchozí podmínky - mám obrázek (načtený v QImage objektu) a potřebuji, aby byl průhledný pro nějakou akci - typicky pro vykreslení (co jiného by jste taky s obrázkem chtěli dělat, že?). Hned na první pohled mě při hledání jak na to zaujala metoda QImage::setAlphaChannel ( const QImage & alphaChannel ), jenže ta požaduje alphaChannel jako parametr, takže co s tím?

Jistě budeme si ho muset vytvořit, otázkou zůstává jak. Po relativně krátkém patrání a testovaní se mi oplatil tento postup:

QImage obrazek("./cesta/image.png");
QImage pruhlednost(obrazek.width(), obrazek.height(), QImage::Format_Indexed8);
pruhlednost.fill(70);
obrazek.setAlphaChannel(pruhlednost);

Kde parametr pro QImage::fill() nabývá hodnot od 0 do 255, kde 0 znamená plnou průhlednost (obrázek není vidět) a 255 znamá žádnou průhlednost (obrázek je “plný”). Ještě dodám, že “pruhlednost” a “obrazek” musí mít stejnou velikost (kód nahoře bude fungovat správně), jinak QT zahlásí runtime chybu (zprávu do konzole) a neaplikuje požadovaný alfa kanál. Ale aspoň nespadne… :-)

Načtení cookie v Javascriptu

June 16, 2007 on 7:02 pm | In Poznámečky | 2 Comments

Zase moje čistě technická poznámka řešící malý problémek, nad kterým jsme strávil “menší” chvíli.

Continue reading Načtení cookie v Javascriptu…

Objekty uložené v session v PHP

June 9, 2007 on 10:07 pm | In Poznámečky | 1 Comment

Řešil jsem problém - mám třídu (dobře instanci třídy) v PHP popisující klienta (jméno, jeho preference, atd…). Pěkně vše pohromadě na jednom místě.Uložil jsem si ji do session:

$_SESSION['client'] = new ClientInfo();

A teď se to začne komplikovat - pokud takto do třídy cokoliv uložím/změním, tak po dalším načtením stránky bude v session “výchozí podoba” třídy bez jakýchkoliv změn a navíc se nebude hlásit jako normální objekt, ale jako “object(__PHP_Incomplete_Class)”.

Jedním řešením může být serializace objektu (můj první nápad), ale o dost jednodušší řešení poradil google. Stačí uvést deklaraci třídy před voláním fce session_start().

require_once('ClientInfo.class.php');
session_start();

Některé věci je dobré vědět a ty ostatní si pro jistotu poznamenám ;-)

QT a velikost widgetu (okna)

March 5, 2007 on 11:53 pm | In Poznámečky | 2 Comments

QT si nové okno (widget) otvírá kde se mu zachce. Bori mě požádál, abych to nějak ve své ročníkovce opravil. Hned první zábava přišla při hledání metody, která pohyb okna obstarává. Totiž, věděl jsem o existenci metody pos(), která vrací pozici widgetu (buď okna, nebo relativně vůčí mateřskému widgetu), takže jsem logicky hledal metody jako setPos(), setPosition() či position(). Blbě, metoda pro pohyb se jmenuje move() (jak logické, že? ).

Ale teď ke smyslu poznámky, při pozicování child (záměrně nepřekládáno) okna do prostřed aplikace jsem narazil na problém. Výpočet je něco ve smyslu: Materske.pos().width() + Materske.width() / 2 + Child.width() / 2. Jenže nové okno bylo všude možne jen ne uprostřed. QT totiž nastavuje velikost okna až v okamžiku, kdy se zobrazuje (metoda show()), takže pohyb okna musí být až po jeho zobrazení. Dobré vědět

Ještě poznámečka k praktičnosti: v linuxu nejsem schopen postřehnout, že se okno vytvořilo a až poté posunulo (grafika stíhá vykreslovat dostatečně rychle ať si obsluha ničeho nevšimne). Windows ve vmware serveru už stihnou zobrazit i obrys původního okna. Je to nepěkné, ale tak doufám, že v normalních Windows si toho nikdo nevšimne, přeci jen rychlost vykreslování je ve vmware známým problémem…

Drag & Drop v QT 4.2

February 25, 2007 on 5:20 pm | In Poznámečky | 2 Comments

Drag&drop je technologie, kterou Vám jistě nemusím představovat. Něco někde chytnete, pustíte úplně někde jinde a hle ono se s tím něco provede. Vzhledem k jednoduchosti s jakou se takto pracuje, jsem se rozhodl naučit se tuto vlastnost implementovat i do mých QT aplikací (nejnovější budiš mata). Trolltech (firma stojící za celým QT) má v dokumentaci velice pěkně napsaný návod jak na to. Buhužel pro mě je v něm chyba, kterou se snažím vyřešit už půl dne.

Continue reading Drag & Drop v QT 4.2…

Had Internet Explorer a ID v non-div prvcích

January 7, 2007 on 7:32 pm | In Poznámečky | 2 Comments

Had v nadpise zastupuje Vámi vybrané sprosté slovo na adresu tohoto webového prohlížeče. Celý den si dnes hraju s AJAXem a snažím se vyřešit jeden jediny problém. Už jsem zavrhnul mnoho “konspiračních” teorií co IE umí či neumí (že Zbyňku :-) ) a došel konečně do stavu, kdy jsem nejen schopen identifikovat problém (což mimochodém nebylo úplně jednoduché, číslo řádku kde je chyba mám asi od půl dvanácté), ale taky Vám nabídnout možné řešení.

Continue reading Had Internet Explorer a ID v non-div prvcích…

Post s AJAXem II

January 6, 2007 on 8:50 pm | In Poznámečky | No Comments

Před časem jsem psal jak zprovoznit metodu POST v AJAXU. Dnes zkouším další hrátky s tímto mocným nástrojem (protože na nějaký větší projekt teď nemám moc času) a narazil jsem na jednu vlastnost, kterou asi bude dobré zdůraznit. Nezáleží totiž pouze na uvedení řádky posílající content-type hlavičku, ale taky na jejím umístění:

XMLHTTP.open('POST', 'nejaky_script.php', true);
XMLHTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

Jak vidíte, hlavička musí být až po volání metody open. Jediný prohlížeč, kterému nevadí ani přehozené pořádí je konqueror - opera i FF na tomto spadli. Chybové hlášky si můžete prohlédnout níže:

Continue reading Post s AJAXem II…

Bitová pole

December 21, 2006 on 5:24 pm | In Poznámečky | No Comments

V tvorbě BitTorrent klienta jsem došel do stavu, kdy jsem potřeboval bitové pole. Nahradit ho za char nepřipadalo v úvahu, protože by to znamena enormní plýtvání místem (7 bitů by vždy šlo nazmar a to potřebuji pole, které může šahat co do velikosti až do tisíců). Proto jsem požádal JR zda-li nějaký kód nemá. Měl - ovšem ten jsem odmítl, protože se mi zdál přiliš nepřehledný (opět chyba - ale o tom až za chvíli). Proto jsem si v dnešní “vánoční hodině” programování vytvořil svůj vlastní algoritmus na práci s bitovým polem. No a postupným zjednodušováním jsem v podstatě došel ke kódu, který se v mnoha ohledech podobá tomu co stvořil JR. Ale tak aspoň vím přesně proč a jak to funguje…

Continue reading Bitová pole…

Konec řádku v HTTP

December 9, 2006 on 12:52 pm | In Poznámečky | No Comments

Při pokračování mých pokusů o naprogramování vlastního jednoduchého BitTorrent klienta jsem se docela dlouho zdržel při implementaci “komunikátoru” s tracker serverem. Tracker server udržuje informace o jednotlivých členech a jeho role je nezastupitelná. Pro komunikaci používá asi všem známý HTTP protokol.

A teď kde přesně byl zakopaný pes. S většinou tracker serverů jsem se domluvil, ovšem můj lokalní azureus na můj požadavek nijak nereagoval. Což mi přislo strašně podivné. Nakonec jsem skončil u pročítaní RFC a problém úspěšně identifikoval. Jde o to, že linux používá pro označení konce řádků jeden znak LF (známá escape sekvence \n). No a HTTP vyžaduje windowsackou konvenci označení konce řádků, kdy je první CR a pak až LF (tedy \r\n), což mě docela překvapilo, ale po této úpravě již vše funguje jak má.

No a teď technická vložka - vzhledem k tomu, že od některých serverů jsem dostal odpověď ve tvaru v jakém jsem ji posílal, tak i oni museli trpět stejnou chybou jako můj “soft” a nebo byli natolik dokonalí, že rozpoznali, že se můj “soft” nechová přesně podle RFC a tak mi poslali odpoveď ve stejném tvaru v jakém jsem jim poslal požadavek. Zajimavé…

Post v AJAXu

October 30, 2006 on 11:20 pm | In Poznámečky | No Comments

Poslední dobou si po nocích hraju s AJAXem (docela se mi tato technologie líbí, ale o tom až někdy jindy) a narazil jsem na malý problémek, který se sice hnedle vyřešil (s pomocí strýce google), ale tak pro příště si řešení poznamenám ;-) .

Continue reading Post v AJAXu…

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^