Seite 1 von 1

im Slot auf Sender zugreifen

Verfasst: 8. Juni 2009 22:08
von nico
Hallo,

zum Thema Signal-Slot wurde hier ja schon einiges gesagt, aber für mein Problem finde ich keine Lösung.

Ich habe die Klasse lineClass:

lineClass.h

Code: Alles auswählen

class lineClass : public QWidget
{
    Q_OBJECT
public:
    lineClass(QString nameString, QWidget *parent = 0);
    ~lineClass();
    QLabel *name;
    QMultiSlider *slider;
    QTimeEdit *time;
    QLabel *stunden;

signals:
    void sliderBewegt();
};
lineClass.cpp

Code: Alles auswählen

#include "lineclass.h"

lineClass::lineClass(QString nameString, QWidget *parent) :
    QWidget(parent)
{
    name = new QLabel(nameString);
    name->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    slider = new QMultiSlider(this);
    connect(slider, SIGNAL(cursorMove()), this, SIGNAL(sliderBewegt()));
    time = new QTimeEdit();
    time->setDisplayFormat("HH:mm");
    time->setGeometry(0, 0, 50, 20);
    time->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    stunden = new QLabel("0");
    stunden->setGeometry(0,0,50,20);
    stunden->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}

lineClass::~lineClass()
{
}
Davon werden so Instanzen erzeugt:

Code: Alles auswählen

void day::createLine(QString &name, int row)
{
    lineClass *line = new lineClass(name);
    connect(line, SIGNAL(sliderBewegt()), this, SLOT(saveTime()));
    m_ui->gridLayout->addWidget(line->name, row, 0);
    m_ui->gridLayout->addWidget(line->slider, row, 1);
    m_ui->gridLayout->addWidget(line->time, row, 2);
    m_ui->gridLayout->addWidget(line->stunden, row, 3);
}
Nun möchte ich in meinem Slot diese lineClass als Sender wieder bekommen, also:

Code: Alles auswählen

lineClass *line = (lineClass *) sender();
Wenn ich debugge und mir line ansehe, finde ich die Werte für den Slider. Alle anderen Widgets sind aber anscheinend leer, obwohl sie auf im GUI richtig dargestellt werden.

Kann mir jemand auf die Sprünge helfen?[/code]

Verfasst: 8. Juni 2009 22:17
von upsala
Zum einen empfehle ich dir ein qobject_cast oder zumindest einen dynamic_cast um den 'sender' zu überprüfen.

Dein line sendet und line wird empfangen, ich verstehe nicht, welche anderen Widgets zu meinst.

Verfasst: 9. Juni 2009 00:43
von nico
Hallo upsala,

ich habe die Zeile abgeändert:

Code: Alles auswählen

lineClass *line = qobject_cast<lineClass*>(sender());
Ich habe vergessen, zu erwähnen, dass ich auf die andere Widgets, die ich in lineClass habe, zugreifen möchte. Also ich benötige in meinem Slot zB den Text aus dem Label "name".

Das Problem hat sich erledigt. Ich kann den Text auslesen, nur der Watcher im Debugger zeigt nix an.

Also vielen Dank für deinen Tip!