QT tip #1 - Průhlednost obrázků
July 9, 2007 on 3:59 pm | In Programing, Poznámečky | 1 CommentZačí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 CommentsZase moje čistě technická poznámka řešící malý problémek, nad kterým jsme strávil “menší” chvíli.
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
Miny v ncurses módu
March 16, 2007 on 11:06 pm | In Programing | No CommentsSemotamo hrávám ve škole se spolužáky miny. Jistě tuto návykovou hru znáte z Windows či KDE. Máte různě velké hrací pole, kde pomocí číselných údajů, kolik se v okolí nachází ukrytých min, musíte odhalit kde jsou ukryty. Klon min pro KDE (nesoucí “překvapivě” jméno kmines) se bohužel na touchapu notebooku velice špatně ovládá - ne vždy mám USB myš připojenu (někdy se to prostě nehodí
). Tedy s pohyby problém není, ten je až s tlačítky, kdy se častokrát omylem překliknete a hru prohrajete…
QT a velikost widgetu (okna)
March 5, 2007 on 11:53 pm | In Poznámečky | 2 CommentsQT 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 CommentsDrag&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.
Mata revno22
February 24, 2007 on 12:11 pm | In Programing | 2 CommentsTak jsem nějakým záhadným způsobem došel ve své ročníkové prácí ke stavu, který je již zveřejnitelný. Nečekejte žádné zázraky, jedná se zatím o bezgrafikový build.Tedy jen text, ale za to snad funkční
.
Problém s onClick a styly na dynamicky přidaných prvcích v IE
January 11, 2007 on 6:53 pm | In Programing | 1 CommentJiž v neděli jsem zjistil, že IE má problémy s dynamicky přidanými prvky. Hned po tom, co jsem s úspěchem odstranil tento problém, tak se vyskytl další
. Holt s IE se člověk nikdy nenudí. Pokud přidáte do stránky nějaky nový prvek (dynamicky) přes DOM metody JavaScriptu a nastavíte si k ní styly a onclick akci takto:
div = document.createElement('div');
div.setAttribute('class', 'inline hand');
div.setAttribute('onclick', 'javascript:explorerGetContent(\'-parametr\');');
…tak zkuste hádat? Ano, ve všech webových prohlížečích (Firefox, Opera, Konqueror) to bude fungovat přesně, jak by jste čekali. Na daný div se aplikují styly “inline” a “hand” a po uživatelově kliku se spustí fce explorerGetContent(). Jenže opět nám IE (verze 6.0!, se sedmičkovou řadou zatím nemám zkušenosti) dokazuje, že do kategorie webových prohližečů prostě nepatří. Neaplikují se ani styly ani javascript. Navíc velice zajimavý je fakt, že fyzicky se ty parametry do divu opravdu vloži - jsem si je nechal “vypsat” (metodou window.alert()), jen je jaksi IE zapomene provést
Bohužel tento problém se mi efektivně zatím nepodařilo vyřešit, takže najde-li se někdo kdo zná řešení, prosím neváhejte a podělte se se mnou s těmito informacemi v diskuzi. Já totiž mám pouze částečné řešení:
div.onclick = explorerGetContent;
div.className = 'inline hand';
Styly se takto dají nastavit bez problému a vše funguje tak jak chci všude (včetně IE). Akce onClick funguje taktéž, ale má jeden obrovský neduh - do div objektu totiž nastavujete pouze danou fci (přesněji řečeno handler dané akce). Tedy nemůžete zadat parametry! Což je bohužel stav, se kterým nemohu dále pokračovat. Snad se mi podaří nalézt lepší řešení…
Had Internet Explorer a ID v non-div prvcích
January 7, 2007 on 7:32 pm | In Poznámečky | 2 CommentsHad 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 CommentsPř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:
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^