Seite 1 von 1
LineEdit Wert durch Scrollbar ändern
Verfasst: 8. September 2004 17:41
von littlepeoplegirl79
Hallo,
bin noch ziemlich neu im Umgang mit QT. Ich würde
gern durch einen Scrollbar und dessen Value, Einfluss auf
eine LineEdit nehmen.
Vergleichbar wie bei folgenden Slider und Spinbox:
Code: Alles auswählen
connect( threshold_spnbox, SIGNAL( valueChanged(int) ), threshold_sldr, SLOT( setValue(int) ) );
connect( threshold_sldr, SIGNAL( valueChanged(int) ), threshold_spnbox, SLOT( setValue(int) ) );
Leider funktioniert aber mein Gedanke nicht:
Code: Alles auswählen
connect( RH_sldr, SIGNAL( valueChanged(int) ), rh_ledt, SLOT( textChanged ( char(RH_sldr->value()) ) ) );
Gibt es da eine möglichkeit?
Gruß und Dank!
Verfasst: 8. September 2004 21:34
von miketech
Hi,
textChanged ist ein Signal und kein Slot. Es gibt ein Slot:
void QLineEdit::setText ( const QString & )
Das Problem ist nun:
connect( RH_sldr, SIGNAL( valueChanged(int) ), rh_ledt, SLOT(setText(const QString &) ) );
wird nicht funktionieren, da const QString und int inkompatible Typen sind.
Du müsstest folgendermaßen vorgehen:
connect( RH_sldr, SIGNAL( valueChanged(int) ), this, SLOT(eigenerSlot(int) ) );
Damit sorgst Du dafür, dass in der aktuellen Klasse eigenerSlot(int) aufgerufen wird, wenn der Wert geändert wird.
Den Slot eigenerSlot(int) musst Du natürlich vorher implementieren in der Art:
void Klassename::eigenerSlot(int value) {
rh_ledt->setText(QString::number(value));
}
Sowas in der Art könnte funktionieren. Eine Änderung des Wertes ruft also nicht direkt einen Slot von LineEdit auf, sondern einen eigenen, welcher den Int-Wert in einen String umwandelt, und an das LineEdit übergibt.
Vielleicht hilft Dir das ja weiter.
Gruß
Mike
Verfasst: 9. September 2004 08:48
von littlepeoplegirl79
Funktioniert super, ich danke Dir!
Verfasst: 9. September 2004 08:53
von littlepeoplegirl79
Achja, noch eine kleine Frage.
Ich will mit einem Button, die Standardwerte
wieder schreiben, kann ich das in einem Aufruf machen,
oder muss ich für jede Scrollbar (6 Stück) einen einzelnen
connect schaffen?
Ich denke für einzelne Slots sähe es so aus!?
Code: Alles auswählen
connect( reset_bto, SIGNAL( clicked() ), RH_sldr, SLOT( reset_slot() ) );
reset_slot()
{
RH_sldr->setValue( 195 );
}
Kann ich das auch irgendwie zusammenbringen?
Gruß und Dank!
Verfasst: 9. September 2004 09:33
von pm_Snake
Du kannst doch im Reset-slot alle Scrollbars auf Standart setzen ?
reset_slot()
{
m_scroll1->value( xx );
m_scroll2->value( xx );
m_scroll3->value( xx );
m_scroll4->value( xx );
m_scroll5->value( xx );
}
Verfasst: 9. September 2004 09:44
von littlepeoplegirl79
aber mit welchem connect lösen ich ihn aus,
kann doch nur einen reciever eintragen?
Verfasst: 9. September 2004 09:50
von pm_Snake
connect( <deinButton>, SIGNAL( clicked() ), <klasse-des-slots>, SLOT( reset_slot() ) );
Wenn du mehrere Buttons hast kannst du auch alle Buttons mit diesem einen slot verlinken
connect( <deinButton1>, SIGNAL( clicked() ), <klasse-des-slots>, SLOT( reset_slot() ) );
connect( <deinButton2>, SIGNAL( clicked() ), <klasse-des-slots>, SLOT( reset_slot() ) );
connect( <deinButton3>, SIGNAL( clicked() ), <klasse-des-slots>, SLOT( reset_slot() ) );
Sonst verstehe ich nicht genau was du meinst
Verfasst: 9. September 2004 09:58
von littlepeoplegirl79
also bei mir sieht es wie folgt aus:
folgende Scrollbars gibt es:
Diese ganzen Scrollbars werden mit einem einzigen Reset Button (reset_bto) zurückgestellt.
Code: Alles auswählen
connect( reset_bto, SIGNAL( pressed() ), RH_sldr, SLOT( reset_Slot() ) );
reset_Slot( )
{
RD_sldr->setValue( 90 );
GD_sldr->setValue( 70 );
BD_sldr->setValue( 50 );
RH_sldr->setValue( 195 );
GH_sldr->setValue( 155 );
BH_sldr->setValue( 130 );
}
Jedoch bringt er mir die Meldung:
Code: Alles auswählen
QObject::connect: No such slot QScrollBar::reset_
QObject::connect: (sender name: 'reset_bto')
QObject::connect: (receiver name: 'RH_sldr')
Verfasst: 9. September 2004 10:35
von littlepeoplegirl79
fehler gefunden muss:
Code: Alles auswählen
connect( reset_bto, SIGNAL( clicked() ),[b] this[/b], SLOT( reset_Slot() ) );
heissen!
Danke!
Verfasst: 9. September 2004 10:35
von pm_Snake
Es gibt in der Klasse Scrollview anscheinend keinen Slot reset_slot()
Daher musst du dir denien Eigenen machen.
Du hast sicher enie Dialog-klasse abgeleitet für deinen Dialog ja?
In die Headerdatei fügst du nun unter den Konstruktoren etc ein:
public slots:
void reset_slot();
-----
In deinem .cpp-File dann
<Klassenname des Dialogs>::reset_slot()
{
// hier jetzt alle Scrolls zurücksetzen
}
So müsste es funktionieren
edit: Genau. So ungefähr wollte ich es erklären
