LineEdit Wert durch Scrollbar ändern

Alles rund um die Programmierung mit Qt
Antworten
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

LineEdit Wert durch Scrollbar ändern

Beitrag 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!
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag 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
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

Funktioniert super, ich danke Dir!
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag 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!
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag 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 );
}
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

aber mit welchem connect lösen ich ihn aus,
kann doch nur einen reciever eintragen?
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag 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
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

also bei mir sieht es wie folgt aus:

folgende Scrollbars gibt es:

Code: Alles auswählen

RH_sldr;
GH_sldr;
BH_sldr;
RD_sldr;
GD_sldr;
BD_sldr;
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')
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

fehler gefunden muss:

Code: Alles auswählen

connect( reset_bto, SIGNAL( clicked() ),[b] this[/b], SLOT( reset_Slot() ) );
heissen!

Danke!
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag 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 ;)
Antworten