#!/usr/bin/perl -w # Pfad des Perl-Interpreters #........................................................ class SpinListLCD package SpinListLCD; use Qt; use Qt::isa qw(Qt::Widget); use Qt::attributes qw( schiebbalk lcdzahl spinbox ); use Qt::slots aktualisiereSpinListLCD => ['int']; use Qt::signals farbeGeaendert => ['int']; sub NEW { # SpinListLCD-Konstruktor shift->SUPER::NEW(@_[1..$#_]); my $text = shift; #................ Erzeugen eines Text-Labels my $name = Qt::Label( this ); $name->setAlignment( &Qt::AlignCenter ); $name->setText( $text ); $name->setGeometry( 1, 10, 10, 30 ); #................ Erzeugen eines Schiebebalken my $schiebbalk = Qt::Slider( 0, 255, 5, 120, &Qt::Horizontal, this); $schiebbalk->setTickmarks( &Qt::Slider::Below ); $schiebbalk->setTickInterval( 10 ); $schiebbalk->setGeometry( 20, 10, 200, 30 ); schiebbalk = $schiebbalk; #................ Erzeugen einer LCD-Anzeige my $lcdzahl = Qt::LCDNumber(3, this ); $lcdzahl->setSegmentStyle( &Qt::LCDNumber::Filled ); $lcdzahl->setPaletteBackgroundColor( &Qt::darkGray ); $lcdzahl->setGeometry( 230, 10, 60, 30 ); $lcdzahl->display( 120 ); lcdzahl = $lcdzahl; #................ Erzeugen von drei Spinboxen my $spinbox = Qt::SpinBox( -1, 255, 1, this ); $spinbox->setValue( 120 ); $spinbox->setSpecialValueText( "Default" ); $spinbox->setWrapping( 1); $spinbox->setGeometry( 310, 10, 80, 30 ); spinbox = $spinbox; #................ Verbinde Schiebebalken und LCD-Anzeige this->connect( $schiebbalk, SIGNAL 'valueChanged(int)', SLOT 'aktualisiereSpinListLCD(int)' ); #................ Verbinde Spinbox und LCD-Anzeige this->connect( $spinbox, SIGNAL 'valueChanged(int)', SLOT 'aktualisiereSpinListLCD(int)'); } sub aktualisiereSpinListLCD { #........ Slotroutine my $value = shift; spinbox->setValue( $value ); if ( $value == -1 ) { $value = 120; } schiebbalk->setValue( $value ); lcdzahl->display( $value ); emit this->farbeGeaendert( $value ); } #.......................................................... class FarbLabel package FarbLabel; use Qt; # Laden des PerlQt-Moduls use Qt::isa qw(Qt::Label); use Qt::attributes qw( rot gruen blau ); use Qt::slots rotNeueFarbe => ['int'], gruenNeueFarbe => ['int'], blauNeueFarbe => ['int']; sub NEW { # FarbLabel-Konstruktor shift->SUPER::NEW(@_); rot = 120; gruen = 120; blau = 120; my $farbe = Qt::Color( 120, 120, 120 ); setPaletteBackgroundColor( $farbe ); } sub rotNeueFarbe { rot = shift; my $farbe = Qt::Color( rot, gruen, blau ); setPaletteBackgroundColor( $farbe ); } sub gruenNeueFarbe { gruen = shift; my $farbe = Qt::Color( rot, gruen, blau ); setPaletteBackgroundColor( $farbe ); } sub blauNeueFarbe { blau = shift; my $farbe = Qt::Color( rot, gruen, blau ); setPaletteBackgroundColor( $farbe ); } #..................................................................... main package main; use Qt; use SpinListLCD; use FarbLabel; my $app = Qt::Application(\@ARGV); $mywidget = Qt::Widget; $mywidget->setGeometry( 100, 100, 540, 250 ); #................ Erzeugen von drei SpinListLCD-Balken my $rotBalken = SpinListLCD( "R", $mywidget ); $rotBalken->setGeometry( 10, 30, 390, 60 ); my $gruenBalken = SpinListLCD( "G", $mywidget ); $gruenBalken->setGeometry( 10, 100, 390, 60 ); my $blauBalken = SpinListLCD( "B", $mywidget ); $blauBalken->setGeometry( 10, 170, 390, 60 ); #................ Erzeugen einer Farbanzeige my $farbAnzeige = FarbLabel( $mywidget ); $farbAnzeige->setAlignment( &Qt::AlignCenter ); $farbAnzeige->setText( "Farbe" ); $farbAnzeige->setGeometry( 420, 30, 100, 200 ); #................ Verbinde RGB-Balken mit Farbanzeige $farbAnzeige->connect( $rotBalken, SIGNAL 'farbeGeaendert(int)', SLOT 'rotNeueFarbe(int)' ); $farbAnzeige->connect( $gruenBalken, SIGNAL 'farbeGeaendert(int)', SLOT 'gruenNeueFarbe(int)' ); $farbAnzeige->connect( $blauBalken, SIGNAL 'farbeGeaendert(int)', SLOT 'blauNeueFarbe(int)' ); $app->setMainWidget($mywidget); $mywidget->show(); exit $app->exec();