[Kde-perl] Qt::Slider revisited
Wolfgang Hommel
wolf at code-wizards.com
Thu Mar 25 21:26:00 CET 2004
Greetings!
Although it's been briefly discussed on the list just two weeks ago, I'd
really appreciate some details on the "Qt::Slider isn't displayed"
issue. I'm referring to the code of PerlQT tutorial 6, presently
available at
http://perlqt.sourceforge.net/index.php?page=viewcode&file=tutorials/t6/t6.pl
Specifically this part:
package LCDRange;
use Qt;
use Qt::isa qw(Qt::VBox);
sub NEW {
shift->SUPER::NEW(@_);
my $lcd = Qt::LCDNumber(2, this, "lcd");
my $slider = Qt::Slider(&Horizontal, this, "slider");
$slider->setRange(0, 99);
$slider->setValue(0);
$lcd->connect($slider, SIGNAL('valueChanged(int)'), SLOT('display(int)'));
}
Now, when I run the tutorial code on PerlQt 3.008, Qt 3.3.1, Linux,
- the Slider doesn't show up at all, but the LCD does, as it should
- if I use a Qt::Pushbutton instead of a Qt::Slider, both the LCD and
the Pushbutton show up for each LCDRange instance
- running the original tutorial code (with the Slider), but as .cpp
source, works fine as well (slider shows up)
Now, if the above package is changed to:
package LCDRange;
use Qt;
use Qt::isa qw(Qt::VBox);
my slider;
sub NEW {
shift->SUPER::NEW(@_);
my $lcd = Qt::LCDNumber(2, this, "lcd");
$slider = Qt::Slider(&Horizontal, this, "slider");
$slider->setRange(0, 99);
$slider->setValue(0);
$lcd->connect($slider, SIGNAL('valueChanged(int)'), SLOT('display(int)'));
}
(This has been suggested 2 weeks ago)
Then the Slider gets displayed, but (of course?) only the very last
instance of all "LCDRange"s has got a Slider, the others don't; i.e.,
the example code creates 16 of them, but only the 16th (bottom right)
got a Slider attached to it.
I can get it to work by actually using
package LCDRange;
use Qt;
use Qt::isa qw(Qt::VBox);
my $i = 0;
my @slider;
sub NEW {
shift->SUPER::NEW(@_);
my $lcd = Qt::LCDNumber(2, this, "lcd");
$slider[$i] = Qt::Slider(&Horizontal, this, "slider");
$slider[$i]->setRange(0, 99);
$slider[$i]->setValue(0);
$lcd->connect($slider[$i], SIGNAL('valueChanged(int)'),
SLOT('display(int)'));
$i++;
}
But I doubt that's elegant. :-)
Could someone please tell me,
- whether this is intentional behavior?
- why this only happens with Qt::Slider (does it?)?
- how the tutorial code should be modified more elegantly to make it
work properly?
Thanks in advance,
Regards,
Wolfgang
More information about the Kde-perl
mailing list