im Slot auf Sender zugreifen

Alles rund um die Programmierung mit Qt
Antworten
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

im Slot auf Sender zugreifen

Beitrag 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]
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Beitrag 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!
Antworten