[gelöst] QAbstractSlider ohne Prozentanzeige

Alles rund um die Programmierung mit Qt
Antworten
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

[gelöst] QAbstractSlider ohne Prozentanzeige

Beitrag 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
Zuletzt geändert von chris_g am 27. November 2009 10:07, insgesamt 1-mal geändert.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Slider an sich hat keine Prozentanzeige, also ich verstehe nicht, was du ausblenden willst. Source code wäre auch nicht schlecht...
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

Beitrag 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
Dateianhänge
screen.jpg
screen.jpg (2.99 KiB) 5541 mal betrachtet
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

Beitrag von chris_g »

Hat niemand eine Ahnung wo diese Anzeige herkommt oder auszuschalten ist? Ich kann in der Klasse selbst nichts finden.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag 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...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Und noch ne ganz blöder Frage, kann es sein, dass diese Hintergrundbilder schon so aussehen? :) Das wär ein Gag :)
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

Beitrag 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.
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

[gelöst]

Beitrag von chris_g »

LOL ok, der Fehler saß wie so oft ca. 50 cm vor dem Bildschirm :oops:

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.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Amen! :)
Antworten