Seite 1 von 1
[gelöst] QAbstractSlider ohne Prozentanzeige
Verfasst: 19. November 2009 12:58
von chris_g
Hallo,
ich habe einen VideoController für libvlc mit Qt gebaut. Es funktioniert alles soweit wunderbar.
Die Volumeneinstellung wird mittels eines Sliders (QAbstractSlider) gesteuert. Als Grundlage dienten die QT4-Klassen des original VLC-MediaPlayers.
Ich möchte jetzt den Slider aber ohne die Prozentanzeige haben, resp. diese mit weißem Text, statt dem grauen wenn man die Anzeige nicht ausblenden kann.
Leider habe ich zum ausblenden nach langer Suche nichts gefunden. Den Text habe ich versucht mit CSS zu formatieren, was mit aber nicht gelungen ist wie zB. bei Labels. Da bekomme ich es hin.
Danke für einen Tipp.
CG
Verfasst: 19. November 2009 13:33
von lepsai
Slider an sich hat keine Prozentanzeige, also ich verstehe nicht, was du ausblenden willst. Source code wäre auch nicht schlecht...
Verfasst: 19. November 2009 14:18
von chris_g
QSlider hat natürlich keine Protentanzeige, aber QAbstractSlider anscheinend schon. Ich setzte da nämlich gar nichts und will das ja weg haben.
Sourcecode s.u.:
SoundWidget wird auf dem Controller platziert da ich mit QFrame ein Hintergrundbild lade.
Code: Alles auswählen
SoundWidget::SoundWidget( QWidget *_parent): QFrame( _parent )
{
QString styleString = "QWidget{background-image: url(content/pictures/volumeBG.png);}";
this->setStyleSheet(styleString);
this->setFixedSize( 60, 30);
QHBoxLayout *layout = new QHBoxLayout( this );
layout->setSpacing( 0 );
layout->setMargin( 0 );
volumeSlider = new SoundSlider( this, 10, true);
layout->addWidget(volumeSlider);
this->setLayout(layout);
.....
}
Hier der SoundSlider abgeleitet von
QAbstractSlider und mehr oder weniger vom VLC-Source übernommen:
Code: Alles auswählen
/* This work is derived from Amarok's work under GPLv2+
- Mark Kretschmann
- Gábor Lehel
*/
#define WLENGTH 55 // px
#define WHEIGHT 30 // px
#define SOUNDMIN 0 // %
#define SOUNDMAX 100 // % 200 OR 400 ?
SoundSlider::SoundSlider( QWidget *_parent, int _i_step, bool b_hard): QAbstractSlider( _parent )
{
f_step = ( _i_step * 100 ) / AOUT_VOLUME_MAX ;
setRange( SOUNDMIN, b_hard ? (2 * SOUNDMAX) : SOUNDMAX );
setMouseTracking( true );
b_isSliding = false;
b_mouseOutside = true;
setOrientation( Qt::Horizontal );
setMaximum( 100 );
setFocusPolicy( Qt::NoFocus );
setValue( 100 );
pixOutside = QPixmap( "content/pictures/volume-dim.png" );
const QPixmap temp( "content/pictures/volume-full.png" );
const QBitmap mask( temp.createHeuristicMask() );
setMinimumSize( pixOutside.size() );
setMaximumSize( pixOutside.size() );
pixGradient = QPixmap( mask.size() );
/* Gradient building from the preferences */
QLinearGradient gradient( paddingL, 2, WLENGTH + paddingL , 2 );
gradient.setColorAt( 0.0, QColor( 255, 255, 255 ) );
//gradient.setColorAt( 0.22, QColor( c(3), c(4), c(5) ) );
//gradient.setColorAt( 0.5, QColor( c(6), c(7), c(8) ) );
gradient.setColorAt( 1.0, QColor( 255, 255, 255 ) );
QPainter painter( &pixGradient );
painter.setPen( Qt::NoPen );
painter.setBrush( gradient );
painter.drawRect( pixGradient.rect() );
painter.end();
pixGradient.setMask( mask );
}
Hier ein Screenshot (Attachement). Die Prozentanzeige ist nicht von mir sondern erscheint wie gesagt automatisch.
Danke CG
Verfasst: 26. November 2009 16:27
von chris_g
Hat niemand eine Ahnung wo diese Anzeige herkommt oder auszuschalten ist? Ich kann in der Klasse selbst nichts finden.
Verfasst: 26. November 2009 16:47
von lepsai
QAbstractSlider hat gar keine Anzeige (kannste sleber in Qt sourcen nachschauen), also diese Prozentanzeige kommt von woanders. Vielleicht ist da eine Fläche unter dem Widget, die durch Transparenz-Maske durchkommt...
Verfasst: 26. November 2009 16:50
von lepsai
Und noch ne ganz blöder Frage, kann es sein, dass diese Hintergrundbilder schon so aussehen?

Das wär ein Gag

Verfasst: 27. November 2009 09:29
von chris_g
hm... Ich habe ja wie geschrieben den Source von QAbstractSlider durchsucht, aber dort ist, wie du sagst, nichts von einer Anzeige zu finden.
Die Bilder sind definitiv ohne Prozentanzeige, weil selbst gemacht
Wenn du meinen Code anschaust, kannst du sehen, dass ich da auch keine Prozentanzeige bastle. Sehr komisch das Ganze. Irgendwo muss das doch herkommen. Vor allem weil die Zahl sich ja auch ändert bei Mousevents.
[gelöst]
Verfasst: 27. November 2009 10:04
von chris_g
LOL ok, der Fehler saß wie so oft ca. 50 cm vor dem Bildschirm
Im VLC QT4-Source gab es noch einen paintEvent, welcher den Text zeichnet und den ich übernommen, aber übersehen habe...
Da war ich echt mal wieder mit Blindheit gesegnet.
Verfasst: 27. November 2009 10:28
von lepsai
Amen!
