Sziasztok!
A Qt-ban a QComboBox dekorálásával akadtam el. Addig megvan, hogy a listában, a modellen keresztül meg tudom határozni a sorok színét, és a fontot. Csakhogy, amikor kiválasztom az elemet, akkor az aktuális elem már az alapértelmezett fonttal. és színnel jelenik meg.
Próbáltam a QComboBox-ban a QLineEdit widget-ben beállítani a színt és fontot, de ez csak addig jó, amíg a QComboBox-on van a fókusz, ha másik egy widgeten, akkor a QComboBox üres lesz.
Ha a QComboBox-on állítom be a színt és a fontot, elkapva a currentIndexChanged(int) szignált, akkor meg a font dekoráció nem ok. Ha kiválasztok egy elemet áthúzott fonttal, akkor utána a lenyíló listában minden elem áthúzott lesz, az lenyílóban is a QComboBox-ra beállított font dekoráció érvényes, ne az amit a model data() metódusa visszaad.
( a kód: https://github.com/csikfer/lanview2/blob/master/lv2g/lv2models.cpp ,a SLOT az 524 sorban.)
Meg lehet ezt csinálni rendesen? (Szerintem így kéne működnie, de nincs nyoma, hogy ezt más is így akarná, vagy szeretné.)
Hozzászólások
>> Ha kiválasztok egy elemet áthúzott fonttal, akkor utána a lenyíló listában minden elem áthúzott lesz, az lenyílóban is a QComboBox-ra beállított font dekoráció érvényes, ne az amit a model data() metódusa visszaad
Qt 5.8.0 Linux Nálam nem így van.
Miután kiválasztottam az elemet a setStyleSheet-el beállítottam a comboboxnak az aktív elem stílusát. Ezek után a lenyíló popupban csak az veszi fel ezt a stilust aminek nincs megadva az adott tulajdonság. Pl :
hatására csak az az elem lett áthúzva amelyiknek nem volt beállítva a model data metódusnál a fontja.
Próbáltam leírni, hogy ezt csináltam. A listában, ami lenyílik, ott működik is, az színes, font dekoráció (áthúzás, aláhúzás, stb.) is megvan (font családot nem állítok). Ha viszont kiválasztok egy elemet, és nem látszik a lenyíló lista, akkor már nem érvényesek a modellben megadott színek, font dekorációk arra az egy kiválasztott és megjelenített elemre.
Ha beállítom a QComboBox-on a fontot a setFont() metódussal (pl az áthúzást) onnantól kezdve a listán sem jó, mindenhol a QComboBoxra megadott font dekoráció (pl. áthúzás) jelenik meg.
Ha a QComboBox QListBox-ára állítom be a dekorációt, akkor jó, de csak addig, amíg a fókusz rajta van, ha már nincs rajta a fókusz, akkor nem látszik az az egy kiválasztott elem, üres lesz a QLineEdit widget a QComboBox widget-ben.
Talán egy pár képpel egyértelműbb:
A lenyíló lista jó (ha nem állítok be semmit közvetlenül a QComboBox-on):
Ha kiválasztom az elemet, ott nem érvényes a szín, és a font:
(az áthúzott "null" lett kiválasztva.
A QLineEdit-en keresztül beállítva:
majdnem jó, de ha elveszem a fókuszt:
akkor eltűnik a kiválasztott elem.
Egy Ubuntu 16.04-en fejlesztek Qt verzió: 5.5 (elnézést, kicsit ronda lett a képek miatt).
Ok értem. A setStyleSheet nem ilyen agresszív mint a setFont. Nem értem miért, de nem elég neki, hogy legyen beállítva font. Az összes tulajdonságát amit használsz a többi fontnál mindegyiknél be kell állítani.
Pl. ha a combobox setFont metódusát használom a beállításra kiválasztás után, akkor minden font áthúzott lesz aminek nincs beállítva a setStrikeOut(false) a model::data metódusnál . Tehát még így is működik, de a modelnél elég részletesen be kell állítani mindent.
eredmény:
https://tinyurl.com/l9fdxu7
Windows 2012 Server, Qt 5.8 rendesen működik, ahogy Te is mondtad.
Ubuntu 16.04 Qt 5.5: Ha beállítom a QComboBox-on a setFont() metódussal a fontot, akkor a modellben már hiába adom meg a fontot, az nem jut érvényre.
Kipróbáltam, Linux 64bit:
5.5.1 és 5.6.0 tényleg nem jó, (tegnap is megnézhettem volna, de nem gondoltam volna, hogy ez a hiba)
5.8.0 jó
Ezek vannak telepítve. Ha kell akkor win32+mingw -vel is megtudom nézni ezeket a verziókat.
Szerintem ennél sokkal több ráfordítást nem ér a dolog. Rajtam kívül nem használja más Linux alatt, mutogatni Windows-on fogom, ott meg jó (leszámítva, hogy lassabb, de még nem zavaró).
Feltettem a gépemre a Qt 5.7-et ott egy fokkal jobb, de nem az igazi, felemásan működik. Viszont nincs menü, csak ha átváltok másik ablakkezelőre :(.
Nem tudom milyen Qt verziót használsz! DE a stylesheet-el szerintem pont ezeket tudod beállitani...ha jól értettem a problémádat.
--
www.autosys.hu