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 06:00 | Nová verze

Po necelém roce od vydání verze 0.67 byla vydána verze 0.68 populárního telnet a ssh klienta PuTTY. Podrobnosti v přehledu změn. Řešeny jsou také bezpečnostní chyby.

Ladislav Hagara | Komentářů: 0
včera 21:32 | Nasazení Linuxu

Canonical představuje nejnovější verzi chytré helmy DAQRI s Ubuntu pro rozšířenou realitu. K vidění bude příští týden v Barceloně na veletrhu Mobile World Congress 2017.

Ladislav Hagara | Komentářů: 0
včera 21:31 | Pozvánky

Pro zájemce o hlubší znalosti fungování operačních systémů připravila MFF UK nový předmět Pokročilé operační systémy, v rámci něhož se vystřídají přednášející nejen z řad pracovníků fakulty, ale dorazí také odborníci ze společností AVAST, Oracle, Red Hat a SUSE. Tento předmět volně navazuje na kurz Operační systémy ze zimního semestru, ale pokud máte praktické zkušenosti odjinud (například z přispívání do jádra Linuxu) a chcete si

… více »
Martin Děcký | Komentářů: 6
včera 21:30 | Pozvánky

Czech JBoss User Group Vás srdečně zve na setkání JBUG v Brně, které se koná ve středu 1. března 2017 v prostorách Fakulty Informatiky Masarykovy Univerzity v místnosti A318 od 18:00. Přednáší Tomáš Remeš a Matěj Novotný na téma CDI 2.0 - New and Noteworthy. Více informací na Facebooku a na Twitteru #jbugcz.

mjedlick | Komentářů: 0
20.2. 23:45 | Zajímavý software

Na blogu Qt bylo představeno Qt 3D Studio. Jedná se o produkt dosud známý pod názvem NVIDIA DRIVE™ Design Studio. NVIDIA jej věnovala Qt. Jedná se o několik set tisíc řádků zdrojového kódu. Qt 3D Studio bude stejně jako Qt k dispozici jak pod open source, tak pod komerční licencí. Ukázka práce s Qt 3D Studiem na YouTube.

Ladislav Hagara | Komentářů: 10
20.2. 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
20.2. 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 33
20.2. 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 27
19.2. 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 19
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 34
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (71%)
 (3%)
 (10%)
Celkem 680 hlasů
 Komentářů: 63, poslední dnes 11:29
Rozcestník

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: 375×

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.