Seite 1 von 1

(gelöst) Verwendung von QSignalMapper

Verfasst: 5. April 2013 12:52
von geronimo
Hallo zusammen!

Ich habe folgendes Problem:
Über den QtDesigner habe ich vier PushButtons angelegt.
Wenn zwei dieser Buttons ausgewählt wurden, soll man einen weiteren PushButton wählen können, der zuvor disabled war.

Umsetzen möchte ich dies mit einem QSignalMapper. Leider steige ich da noch nicht ganz durch.

Ich orientiere mich bei der Umsetzung an folgender Funktion aus dem Tutorial:

Code: Alles auswählen

    Keypad::Keypad(QWidget *parent)
        : QWidget(parent)
    {
        QSignalMapper *signalMapper = new QSignalMapper(this);
        connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(digitClicked(int)));
    
        for (int i = 0; i < 10; ++i) {
            QString text = QString::number(i);
            buttons[i] = new QPushButton(text, this);
            signalMapper->setMapping(buttons[i], i);
            connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map()));
        }
    
        createLayout();
    }
Meine Funktion sieht bis jetzt wie folgt aus:

Code: Alles auswählen

void scheduling::signalMap()
{
	QSignalMapper *signalMapper = new QSignalMapper(this);
	connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(stratClicked(int)));
	buttons[1] = ui.fcfsButton;
	buttons[2] = ui.sjfButton;
	buttons[3] = ui.rrButton;
	buttons[4] = ui.priorrButton;

	for(int i=0; i<4; ++i)
	{
		signalMapper->setMapping(buttons[i], i);
		connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map()));
	}

	return;
}
Meine Frage lautet jetzt: Wird das so funktionieren oder habe ich etwas falsch auf meinen Fall angewendet?
Das Problem ist, dass ich mir bereits alles verfügbare zu dem QSignalMapper durchgelesen habe, mir aber noch nicht genau klar ist, ob das so richtig gemacht wurde von mir.

Wäre schön, wenn Ihr mir weiterhelfen könntet.

Danke!

Re: Verwendung von QSignalMapper

Verfasst: 17. April 2013 09:58
von Mr.Crank
Tach Geronimo ,

also grundsätzlich sieht der Code verwendbar aus. Ein SignalMapper ist ja nichts anderes
als ein zusammenfassen von vielen Signalen/Slots zu einem großen Ganzen. Du hast deine
Buttons nun mit den Signal clicked() verknüpft, was in deinem Fall soweit auch richtig ist.
Dein connect vom signalMapper würde ich ändern. Deine Button übermitteln den Wert des
zugehörigen Index sobald sie geklickt wurden. Mach Dir das zu nutzen , schreibe eine SLOT
Funktion die diese Integer speichert und überprüft welche Button geklickt wurden .

dein connect könnte dann so aussehen:
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(send_clicked_index(int)));

nun wird der Index vom geklickten Button der Funktion send_clicked_index(int) als Int übergeben.
send_clicked_index(int) muss im SLOT deklariert werden. Wie Du dies nun weiter verarbeitest
ist Dir überlassen.

Re: Verwendung von QSignalMapper

Verfasst: 7. Mai 2013 14:51
von geronimo
Dankeschön für die Antwort!

Problem ist gelöst! :)