Dezactivare/ascundere focus rectangle
-
Ciao,
mai intai de toate doresc sa salut intreaga comunitate programatorilor Qt din Romania!
De ceva timp lucrez la o aplicatie qt-embedded linux/C++ pentru set top box DVB-S/C. Pe partea de GUI/OSD aplicatia suporta skin-uri bazate pe stylesheet. De la inceput am avut aceasta problema, cum sa fac dezactivez sau sa fac invizibil dreptunghiul punctat care indica selectarea unui widget!? Pana acum fie am ignorat in anumite skin-uri, fie l-am facut invizibil cu anumite trick-uri de CSS, de exemplu padding: -1 -1 -1 -1 sau si margin:-1 -1 -1 -1 (acesta poate sa creeze un alt efect nedorit), pe statusul de widget:focus sau item:selected etc. De curand, insa, am intalnit o alta situatie in care aceste trick-uri nu mai merg: daca ai si icon intr-un view item, intr-un tablewidget sa zicem, pt ca dreptunghiul de focus nu acopera si icon-ul, atunci latura din stanga va fi tot timpul vizibila. As dori totusi, ca acest lucru sa-l fac prin cod, fie in aplicatie sau in qt source. Am rasfoit pe net si pe forumuri de qt dar nu am gasit un raspuns satisfacator pana acum.
-
Salut.
[quote author="NicuPopescu" date="1380794545"] cum sa fac dezactivez sau sa fac invizibil dreptunghiul punctat care indica selectarea unui widget!? [/quote]
La ce anume exact vrei sa te referi prin fraza precedenta ? Daca este vorba de focus, poti sa scrii simplu pt. widget-ul respectiv
@
yourWidget->setFocusPolicy(Qt::NoFocus)
@dar cum am zis nu stiu exact daca aceasta este problema la care te referi ...
-
am nevoie ca widget-ul sa fie focusabil, sa poata fi selectat, dar sa scap de "focus rectangle", acel caret/dreptunghi desenat cu linie punctata in jurul widget-ului ...
setFocusPolicy(Qt::NoFocus) nu ma ajuta, pentru ca astfel nu se mai poate selecta widget-ul
-
well ... ce sa zic, cred ca in afara de ce ai inercat tu cu style sheets mai este posibilitatea sa iti faci propriul tau style caz in care ai control la absolut tot ori in cazul tau cu table view sa re-implementezi propriul tau cod de drawing in QStyledItemDelegate::paint. Cel putin pe moment nu am alta idee :-)
-
in sfarsit, am descoperit!
solutia este tot cu css:
- in style sheet-ul de clasa sau id:
i.e. #widgetname
{
...
outline:none;
}
- in item:selected se pune orice care forteaza repainting cu stylesheet ca sa ia in considerare "outline"
orice tablewidget din aplicatie are si custom item delegate, pentru editoare custom dar, in afara de cateva cazuri speciale, am evitat pe cat posibil sa fac overriding la paint pentru ca este complicat sa combini custom painting cu style sheet si sa obtii acelasi rezultat ca cel default plus modificarile tale ... de fapt n-am realizat niciodata asa ceva si nici nu am vazut vreun cod complet sa faca asta, desi ar fi posibil: de exemplu, este simplu sa desenezi text sau orice, insa drawing-ul default se duce ...