» »

[c++] wxWidgets sizerji problem oz. težava

[c++] wxWidgets sizerji problem oz. težava

zhigatsey ::

Živjo,

Delam program, kjer je v glavnem frame-u sizer (wxBoxSizer) kateri vsebuje 9 gumbov, ki jih horizontalno razporedi (povsem enak način kot pri total_commanderju ali krusaderju). Problem nastane, ko pri resizanju forme sizer ne razporedi gumbov čez vso širino ampak vedno nekaj prostora ostane na koncu praznega. Ko sem sam delal poravnavo gumbov v nekem drugem programskem jeziku sem naletel na enak problem. Če imaš devet gumbov potem dolžino zračunaš tako da širino forme deliš s številom gumbov. Vendar pa se vedno odbije decimalna
vrednost pri deljenju. Ta vrednost se potem pokaže v tistem praznem prostoru na koncu. To sem popravil tako, da sem zadnjemu gumbu prištel še (št. gubov * ostanek deljenja). In gumbi so bili lepo razporejeni tudi če je bil zadnji gumb malo večji, ampak vizualno se to ni videlo nič.
Ne vem kako naj to rešim v wxWidgets frameworku. Probal sem že v OnSize eventu zadjni gumb povečati, samo ne deluje pravilno. Naslednja možnost je da bi izpeljal nov razred iz razreda wxBoxSizer in popravil metodo ki resiza widgete, samo to bom uporabil kot zadnjo možnost, ker
se mi zdi dokaj komplicirano kar sem gledal kodo. Če kdo ve kakšen drugačen način bi bil zelo vesel.

Hvala za odgovore

noraguta ::

huh , že malce pozabil wx-i sam IIRC moraš strech faktor za vsako komponento nastavit če hočeš da se ti resiza glede na container. Če sem te sploh pravilno razumel.
Pust' ot pobyedy k pobyedye vyedyot!

Zgodovina sprememb…

  • spremenilo: noraguta ()

Gundolf ::

Če ti lahko algoritem popravim in pustim wx na miru:
(int)dolžinaKontrole = (int)celotnaDolžina / (int)številoKontrol;
(int)pozicijaKontrole = (int)((float)celotnaDolžina / (float)številoKontrol * (int)zaporednaŠtevilkaKontrole);
Upam da razumeš kaj sem mislil. Pri računanju pozicije kontrol rabiš uporabiti tudi decimalke. Pozicija kontrole ni kar pozicija prejšnje + dolžina prejšnje. Tiste decimalke ki ti tako sfalijo se namesto kot prazen prostor na koncu kontrol namestijo kar med kontrolami (ampak med vsakim parom kot max 1 pixel).

zhigatsey ::

Ne ne, v prvem programu, ki sem ga delal v delphiju sem poravnavo gumbov delal na roke v OnResize eventu forme. Zdaj ko delam nov program v cpp in wxWidgets, uporabljam za poravnavo gumbov sizerje oz. wxBoxSizer(horizontal). Tako, da algoritem sploh ni pomemben, če ne bom res izpeljal nov razred iz wxBoxSizerja in overridal metodo za resize kontrol. Če imate čas kar poskusite naklamfat formo (prazno formo s devetimi gumbi v spodnjem delu podobno kot Krusader) recimo v DialogBlocks ali pa v wxDesignerju in pognat in vedno bo na koncu prazen prostor.... Zato res ne vem kaj narediti.... Če imate še kakšen predlog, bi bil zelo vesel....

64202 ::

Če te razumem, bi rad dobil tole (to je ekvivalent iz Qt-ja):


Najbolje da narediš testni primer in pošlješ bug report, počakaj par dni da poštimajo, in stankaj popravek iz cvs-ja/daily snapshota. Vsaj tako gre pri Qt-ju.
I am NaN, I am a free man!

Zgodovina sprememb…

  • spremenilo: 64202 ()

noraguta ::

a border maš na nuli ?
edit:
sprobal sedaj vidim .
Pust' ot pobyedy k pobyedye vyedyot!

Zgodovina sprememb…

  • spremenilo: noraguta ()

zhigatsey ::

Ja imam border na nuli ja. Jah nič hvala vseeno...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Maksimiziranje brez maksimiziranja

Oddelek: Operacijski sistemi
112592 (2222) CyberPunk
»

python -slovar

Oddelek: Programiranje
223137 (2116) Valex86
»

[c++] standardni c++ in dogodki(events)

Oddelek: Programiranje
121759 (1584) yeti
»

[c++] & Win32 API?

Oddelek: Programiranje
131808 (1613) 64202
»

Win32 API in statične knjižnice

Oddelek: Programiranje
71245 (1152) CCfly

Več podobnih tem