Derzeit entwickle ich unter QT Embedded 4.6.3 für Linux eine Steuerungsapplikation, die über ein 7" Touchscreen bedient wird. Soweit läuft alles sehr gut, doch es ist unglaublich schwierig, genau das Handle eines QSliders zu treffen. Ich habe bereits über Style Sheets versucht diesen "Trefferbereich" zu vergrößern, z.B.
/* slider_pwm1 ist ein vertikaler Qslider */
#slider_pwm1::handle {
width : 80px;
min-width : 80px;
}
...aber leider ohne den gewünschten Erfolg...
Deshalb meine Frage an die Wissenden: Wie kann ich die aktive Fläche des Handles vergrößern, sodaß auch Clicks links & rechts neben dem sichtbaren Handle das Handle aktivieren ?
Vielen Dank für Eure Hilfe !
[Edit] Tippfehler im Code beseitigt
Zuletzt geändert von ArneBurghardt am 14. September 2010 08:57, insgesamt 1-mal geändert.
vielen Dank für Deine Antwort.
Leider helfen mir die Anweisungen bei meinem Problem nicht weiter, die aktive Touchfläche für den/das Handle bleibt gleich (klein). Eventuell reagiert die QSlider Klasse anders als die QScrollBar ?
Wie kann man eigentlich das Handle selber (also quasi die Pixmap) vergrößern ? Muss man da zwangsläufig ein eigenes, größeres Bild für das Handle hinterlegen oder kann man das auch mit geschickten Anweisungen im Style Sheet erledigen ?
QSlider::groove:vertical {
background: red;
position: absolute; /* absolutely position 4px from the left and right of the widget. setting margins on the widget should work too... */
left: 4px; right: 4px;
}
QSlider::handle:vertical {
height: 10px;
background: green;
margin: 0 -4px; /* expand outside the groove */
}
QSlider::add-page:vertical {
background: white;
}
QSlider::sub-page:vertical {
background: pink;
}
Das sollte auf jeden fall gehen und dem entsprechend anpassbar
Zuletzt geändert von ScyllaIllciz am 14. September 2010 18:43, insgesamt 1-mal geändert.
Der Anweisungsblock mit QScrollBar:vertical (natürlich umgeschrieben auf #slider_pwm1:vertical) brachte nichts, außer einem Kasten in/um meinen Slider. Die add-line, sub-line, up-arrow und down-arrow Anweisungsblöcke hatten keine sicht- oder spürbaren Auswirkungen.
Es ist zum Mäusemelken...
Der Anweisungsblock mit QScrollBar:vertical (natürlich umgeschrieben auf #slider_pwm1:vertical) brachte nichts, außer einem Kasten in/um meinen Slider. Die add-line, sub-line, up-arrow und down-arrow Anweisungsblöcke hatten keine sicht- oder spürbaren Auswirkungen.
Das funktioniert so nicht! Du darfst den Namen nicht verändern!!!
Das funktioniert so nicht! Du darfst den Namen nicht verändern!!!
?
Mein Verständnis ist wie folgt: Mit der Anweisung "QScrollBar::" änderst Du alle Objekte, die auf QScrollBar basieren, ab der derzeitigen Hierarchie Stufe abwärts. Mit der Syntax "#WidgetName::" änderst Du dagegen gezielt ein Widget. Da ich genau das eine Slider Objekt ändern möchte, spreche ich es mit seinem Namen "#slider_pwm1::" an. Da ich mit der Anweisung
einen Rahmen zeichnen kann, gehe ich davon aus, dass ich das Widget korrekt adressiere. Somit sollte es dort kein Problem geben...
Hast Du / habt ihr evtl. weitere Lösungsvoschläge ?
Mein Verständnis ist wie folgt: Mit der Anweisung "QScrollBar::" änderst Du alle Objekte, die auf QScrollBar basieren, ab der derzeitigen Hierarchie Stufe abwärts. Mit der Syntax "#WidgetName::" änderst Du dagegen gezielt ein Widget. Da ich genau das eine Slider Objekt ändern möchte, spreche ich es mit seinem Namen "#slider_pwm1::" an. Da ich mit der Anweisung
Nein, Du setzt/änderst doch nur den Style von dem Objekt, welches Du selektiert hast, also änderst Du auch dieses. Schau Dir mal den Output von ui_*.h. Dort siehst Du wie das gemacht wird.
Beispiel aus einer ui_*.h:
Ich habe aufgegeben, das Slider Handle zu vergrößern und nutze stattdessen jetzt ein QDial Widget. Das lässt sich sehr gut mit einem Touchscreen bedienen.
QSlider::groove:vertical {
background: red;
position: absolute; /* absolutely position 4px from the left and right of the widget. setting margins on the widget should work too... */
left: 4px; right: 4px;
}
QSlider::handle:vertical {
height: 10px;
background: green;
margin: 0 -4px; /* expand outside the groove */
}
QSlider::add-page:vertical {
background: white;
}
QSlider::sub-page:vertical {
background: pink;
}
direkt im Designer auf einem QSlider (horizontal) nicht funktioniert?