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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 17:02 | Pozvánky

Přijďte si popovídat o open source obecně a openSUSE konkrétně s dalšími uživateli a vývojáři. Oslava nového vydání openSUSE Leap se uskuteční 16. prosince od 17:00 v nových prostorách firmy SUSE v Praze. K dispozici bude nějaké občerstvení a DVD pro ty, kdo je sbírají nebo ještě mají mechaniku. Po párty v kanceláři se bude pokračovat v některé z hospod v okolí.

Miška | Komentářů: 1
dnes 14:55 | Zajímavý software

Byla vydána verze Alpha 1.0 otevřeného operačního systému pro chytré hodinky AsteroidOS. Podporovány jsou hodinky LG G Watch, LG G Watch Urbane, Asus ZenWatch 2 a Sony Smartwatch 3. Ukázka ovládání hodinek na YouTube. Jaroslav Řezník přednášel o AsteroidOS na chytrých hodinkách (videozáznam) na letošní konferenci OpenAlt.

Ladislav Hagara | Komentářů: 0
dnes 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
dnes 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
včera 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
včera 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
včera 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
včera 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 5
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 808 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Qt4 dynamická změna velikosti okna

1.6.2011 23:14 Martin Matějek | skóre: 13 | blog: Flying_circus | Kladno
Qt4 dynamická změna velikosti okna
Přečteno: 367×

Zdravím,

Mám v podstatě dvě otázky:

1) Dynamická změna velikosti okna podle velikosti hlavního widgetu. Chci vyrobit okno, ve kterém bude tabulka nějakých objektů a chci, aby se velikost okna přizpůsobila velikosti tabulky (pokud se vejde na obrazovku). Tabulka může být pokaždé jinak veliká, takže nemůžu použít fixní velikost.

Skládá se to z QMainWindow (hlavní okno), ve kterém je QScrollArea a v ní můj vlastní widget Tabulka (QGridLayout s dalšími widgety).

Zkoušel jsem tohle, ale okno se vyrobí stejně velké jako když jsem velikost nijak nenastavoval.

	QMainWindow window;
	QScrollArea * scroll = new QScrollArea;
	Table * table = new Table;
	
	table->generateTable();
	
	scroll->setWidget(table);
	window.setCentralWidget(scroll);
	window.resize(scroll->sizeHint());	

Tabulka se za běhu může zvětšovat/zmenšovat. Bude se okno dynamicky zvětšovat samo od sebe nebo ho musím po každé změně překreslit ručně? Napadá mě předefinovat resizeEvent tabulky, který zavolá resizeEvent okna, ale přijde celkem komplikované.

2) Maximalizace okna jen na velikost widgetu
Tohle by mělo jít pomocí setMaximumSize(), ale jak zjistím velikost tabulky, když nic z tohohle nevrací rozumnou velikost?

scroll->size();
scroll->sizeHint();
//pripadne
scroll->viewport()->size();
scroll->viewport()->sizeHint();
Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!

Odpovědi

Josef Kufner avatar 2.6.2011 07:54 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Problém tam dělá ta QScrollArea. Zkus resizovat na velikost toho, co je uvnitř (table).

Ale pokaždé, když si néjaký program jen tak mění velikost okna, tak mě to děsně štve.
Hello world ! Segmentation fault (core dumped)
rADOn avatar 2.6.2011 15:31 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Ale pokaždé, když si néjaký program jen tak mění velikost okna, tak mě to děsně štve.
Přesně tak. Pokud máš dobrý důvod něco takového dělat, nastav rozumný horní limit za který se okno už samo zvětšovat nebude.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Josef Kufner avatar 2.6.2011 15:38 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Takový limit ale bude hledat těžko, protože na každém počítači a u každého uživatele je jiný.
Hello world ! Segmentation fault (core dumped)
rADOn avatar 2.6.2011 15:55 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Jako maximum bych použil buď velikost hlavního okna aplikace nebo přinejhorším velikost plochy.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Josef Kufner avatar 2.6.2011 19:35 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Myslíš to okno, co je maximalizované na druhém monitoru, který má úplně jiné rozlišení než ten první?
Hello world ! Segmentation fault (core dumped)
rADOn avatar 3.6.2011 15:01 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
To sem netahej, žádný "druhý" monitor není. Okno patří tam kam ho window manager posadí – implicitně tam kde je jako hlavní okno, ergo to co popisuješ nemůže nastat. Pokud si to uživatel nastaví jinak, může si nastavit i velikost a nemám mu do toho co kecat. Pokud bych náááhodou psal jeden ze vzácných případů kdy má program druhého monitoru zapotřebí (cad, střižna, 3d editor…) bude druhý monitor explicitně nastavený uživatelem. Nemám rád programy, které se snaží být chytřejší než window manager.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
Josef Kufner avatar 3.6.2011 17:34 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Hezky odporuješ sám sobě.
Hello world ! Segmentation fault (core dumped)
3.6.2011 00:54 Martin Matějek | skóre: 13 | blog: Flying_circus | Kladno
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Dobře, na dynamické zvětšování/zmenšování okna kašlu. Přineslo by to víc problémů než užitku.
Problém tam dělá ta QScrollArea. Zkus resizovat na velikost toho, co je uvnitř (table).
Ale jak? Když to zkusím takhle,
scroll->setWidget(table);
scroll->resize(table->size());
nic se nezmění. Možná, že table->size() vrací divnou velikost, ale to se mi nezdá, protože samotná tabulka (jako hlavní widget) se vykreslí tak velká jak je potřeba, případně „vyteče“ ven, když se nevejde na obrazovku.
Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!
3.6.2011 01:24 Martin Matějek | skóre: 13 | blog: Flying_circus | Kladno
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Příloha:

Aktualizace:
1) Teď jsem zkusil resizovat okno až těsně před tím než ho zobrazím a funguje to. Možná pomohlo resizovat na velikost widgetu samotného a ne na velikost widgetu v nějakém kontejneru. Akorát se nezobrazí celé, oříznuté o pár pixelů napravo a dole, takže se objeví oba ScrollBary. Viz příloha.

2) Okno se sice nedá zvětšit nad určitou velikost ručně (myší),

window->resize(table->size())
ale tlačítko Maximize ignoruje maximální velikost widgetu. Jak tohle obejít?

Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!
Josef Kufner avatar 3.6.2011 13:18 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Těch pár pixelů bude rámeček, který přidává QScrollArea.
Hello world ! Segmentation fault (core dumped)
3.6.2011 19:46 Martin Matějek | skóre: 13 | blog: Flying_circus | Kladno
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna
Bylo to přesně tak, ale objevila se zajímavá anomálie když nastavuju velikost widgetu. Pokud to celé nastavuju při volání funkce, velikost okna je správná, ale když si nejdřív vyrobím objekt QSize a ten upravím, okno se zobrazí menší. A přitom oboje má stejné hodnoty.
const int fill = 4;
// spravna velikost okna
window.resize(table->width() + fill,table->height() + fill);
window.setMaximumSize(table->width() + fill, table->height() + fill);

// spatna velikost okna
QSize size;
size = table->size();
size.rwidth() += fill;
size.rheight() += fill;

window.resize(size);
window.setMaximumSize(size);
Samozřejmě použiju to co funguje, ale zajímalo by mě proč se to takhle chová.
Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!
3.6.2011 19:58 Martin Matějek | skóre: 13 | blog: Flying_circus | Kladno
Rozbalit Rozbalit vše Re: Qt4 dynamická změna velikosti okna

Ad 2: Mea culpa, napsal jsem to špatně.

window->setMaximumSize(...)
omezí velikost okna při ručním zvětšování (myší), ale tlačítko Maximize ho vesele ingoruje a zvětší okno na celou obrazovku.

Co jsem se zatím dočetl, tak se o maximalizaci a) stará Window Manager, b) maximizeWindowEvent neexistuje a nedá se pořádně rozlišit co je „obyčejný“ resizeEvent od maximalizace. Čili řešení může být přepsat ve widgetu resizeEvent a v něm kontrolovat rozdíly nové a staré velikosti a konečnou velikost případně upravit.

Musím to udělat takhle nebo existuje ještě jiný způsob?

Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!

Založit nové vláknoNahoru

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

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