Customize QDial with stylesheet
Asked Answered
R

1

6

There are comprehensive examples for style sheets of QWidgets here. Unfortunately QDial is missing from the examples.

Can I change the appearance (basically the color, border of the rotary knob) just by a stylesheet? In this article a new dial class is supporting style sheets, but can it not be done with Qt's standard class?

The slider / scrollbar examples show how every detail can be tweaked, so I wonder if there is something similar for QDial? I understand I can exchange the underlying image, but would prefer an easy way just to set its color, border.

I have tried the standard attributes such as backgroud-color, background, color with no success. Also tried QDial::handle , so a hint would be useful.

Ritaritardando answered 6/1, 2014 at 14:35 Comment(1)
QDial does not support style sheets (here's an old bugreport bugreports.qt-project.org/browse/QTBUG-1160). Though it can be customized through a custom QStyle. Check how QDial looks with a new Fusion style.Unbent
C
3

You can change the background with style sheets but that appears to be it.

Perhaps things have changed since you asked the question on Jan 6, 2014 but I was able to get style sheets to work for the background only. Everything else I tried had no effect.

Notice how the background change affects the needle too.

The QDial widget rendered in FC20 under MATE using the giving stylesheet

from PyQt4 import QtGui, QtCore
import os
import time

class MyDial(QtGui.QDial):
    style =''' 
    QDial
    {
        background-color:QLinearGradient( 
            x1: 0.177, y1: 0.004, x2: 0.831, y2: 0.911, 
            stop: 0 white, 
            stop: 0.061 white, 
            stop: 0.066 lightgray, 
            stop: 0.5 #242424, 
            stop: 0.505 #000000,
            stop: 0.827 #040404,
            stop: 0.966 #292929,
            stop: 0.983 #2e2e2e
        );
    }
    '''
    def __init__(self, parent=None):
        super(MyDial, self).__init__(parent)

        self.setStyleSheet(self.style)

        self.setRange(0,100)
        self.setValue(0)
        self.setWrapping(True) # Smooth transition from 99 to 0
        self.setNotchesVisible(True)
Cung answered 21/10, 2014 at 13:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.