Auf dieser Seite

QSignalMapper Class

Die Klasse „QSignalMapper“ bündelt Signale von identifizierbaren Absendern. Mehr...

Header: #include <QSignalMapper>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt von: QObject

Öffentliche Funktionen

QSignalMapper(QObject *parent = nullptr)
virtual ~QSignalMapper()
QObject *mapping(int id) const
QObject *mapping(QObject *object) const
QObject *mapping(const QString &id) const
void removeMappings(QObject *sender)
void setMapping(QObject *sender, QObject *object)
void setMapping(QObject *sender, const QString &text)
void setMapping(QObject *sender, int id)

Öffentliche Slots

void map()
void map(QObject *sender)

Signale

void mappedInt(int i)
void mappedObject(QObject *object)
void mappedString(const QString &text)

Ausführliche Beschreibung

Diese Klasse sammelt eine Reihe von parameterlosen Signalen und sendet sie mit Integer-, String- oder Widget-Parametern erneut aus, die dem Objekt entsprechen, das das Signal gesendet hat. Beachten Sie, dass Sie in den meisten Fällen Lambdas verwenden können, um benutzerdefinierte Parameter an Slots zu übergeben. Dies ist weniger aufwendig und vereinfacht den Code.

Die Klasse unterstützt die Zuordnung bestimmter Zeichenketten, Ganzzahlen, Objekte und Widgets zu bestimmten Objekten mithilfe von ` setMapping()`. Die Signale der Objekte können dann mit dem Slot ` map()` verbunden werden, der ein Signal aussendet (dies können ` mappedInt()`, ` mappedString()` oder ` mappedObject()` sein), dessen Wert dem ursprünglichen signalgebenden Objekt zugeordnet ist. Zuordnungen können später mit „ removeMappings()“ entfernt werden.

Beispiel: Angenommen, wir möchten ein benutzerdefiniertes Widget erstellen, das eine Gruppe von Schaltflächen enthält (wie eine Werkzeugpalette). Ein Ansatz besteht darin, das Signal ` clicked() ` jeder Schaltfläche mit einem eigenen benutzerdefinierten Slot zu verbinden; in diesem Beispiel möchten wir jedoch alle Schaltflächen mit einem einzigen Slot verbinden und diesen Slot anhand der angeklickten Schaltfläche parametrisieren.

Hier ist die Definition eines einfachen benutzerdefinierten Widgets mit einem einzigen Signal, ` clicked()`, das den Text der angeklickten Schaltfläche ausgibt:

class ButtonWidget : public QWidget
{
    Q_OBJECT

public:
    ButtonWidget(const QStringList &texts, QWidget *parent = nullptr);

signals:
    void clicked(const QString &text);

private:
    QSignalMapper *signalMapper;
};

Die einzige Funktion, die wir implementieren müssen, ist der Konstruktor:

ButtonWidget::ButtonWidget(const QStringList &texts, QWidget *parent)
    : QWidget(parent)
{
    signalMapper = new QSignalMapper(this);

    QGridLayout *gridLayout = new QGridLayout(this);
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, &QPushButton::clicked, signalMapper, qOverload<>(&QSignalMapper::map));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, &QSignalMapper::mappedString,
            this, &ButtonWidget::clicked);
}

Dem Konstruktor wird eine Liste mit Texten übergeben. Es wird ein Signal-Mapper erstellt, und für jeden Text in der Liste wird ein ` QPushButton ` angelegt. Wir verbinden das Signal ` clicked() ` jeder Schaltfläche mit dem Slot ` map()` des Signal-Mappers und erstellen im Signal-Mapper eine Zuordnung von jeder Schaltfläche zu ihrem Text. Schließlich verbinden wir das Signal „ mappedString()“ des Signal-Mappers mit dem Signal „ clicked() “ des benutzerdefinierten Widgets. Wenn der Benutzer auf eine Schaltfläche klickt, sendet das benutzerdefinierte Widget ein einzelnes Signal „ clicked() “ aus, dessen Argument der Text der Schaltfläche ist, auf die der Benutzer geklickt hat.

Diese Klasse war vor allem dann nützlich, als Lambda-Funktionen noch nicht als Slots verwendet werden konnten. Das obige Beispiel lässt sich ohne QSignalMapper einfacher umschreiben, indem eine Verbindung zu einer Lambda-Funktion hergestellt wird.

ButtonWidget::ButtonWidget(const QStringList &texts, QWidget *parent)
    : QWidget(parent)
{
    QGridLayout *gridLayout = new QGridLayout(this);
    for (int i = 0; i < texts.size(); ++i) {
        QString text = texts[i];
        QPushButton *button = new QPushButton(text);
        connect(button, &QPushButton::clicked, [this, text] { clicked(text); });
        gridLayout->addWidget(button, i / 3, i % 3);
    }
}

Siehe auch QObject, QButtonGroup und QActionGroup.

Dokumentation zu den Mitgliedsfunktionen

[explicit] QSignalMapper::QSignalMapper(QObject *parent = nullptr)

Erstellt einen QSignalMapper mit dem übergeordneten Element „ parent “.

[virtual noexcept] QSignalMapper::~QSignalMapper()

Zerstört das „ QSignalMapper “.

[slot] void QSignalMapper::map()

Dieser Steckplatz gibt Signale aus, je nachdem, welches Objekt Signale an ihn sendet.

Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        signalMapper, qOverload<>(&QSignalMapper::map));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        signalMapper, [receiver = signalMapper]() { receiver->map(); });
Weitere Beispiele und Vorgehensweisen finden Sie unter „Verbindung zu überladenen Slots herstellen“.

[slot] void QSignalMapper::map(QObject *sender)

Dieser Slot gibt Signale basierend auf dem Objekt „ sender “ aus.

Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        signalMapper, qOverload(&QSignalMapper::map));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        signalMapper, [receiver = signalMapper](QObject *sender) { receiver->map(sender); });
Weitere Beispiele und Vorgehensweisen finden Sie unter „Anschluss an überladene Slots“.

[signal] void QSignalMapper::mappedInt(int i)

Dieses Signal wird ausgelöst, wenn von einem Objekt, für das eine Ganzzahlzuordnung festgelegt wurde, „ map()“ signalisiert wird. Die dem Objekt zugeordnete Ganzzahl wird an „ i “ übergeben.

Siehe auch setMapping().

[signal] void QSignalMapper::mappedObject(QObject *object)

Dieses Signal wird ausgelöst, wenn „ map()“ von einem Objekt gesendet wird, für das eine Objektzuordnung festgelegt ist. Das von der Zuordnung bereitgestellte Objekt wird an „ object “ übergeben.

Siehe auch ` setMapping()`.

[signal] void QSignalMapper::mappedString(const QString &text)

Dieses Signal wird ausgelöst, wenn von einem Objekt, für das eine Zeichenfolgenzuordnung festgelegt ist, „ map()“ signalisiert wird. Die dem Objekt zugeordnete Zeichenfolge wird in „ text “ übergeben.

Siehe auch ` setMapping()`.

QObject *QSignalMapper::mapping(int id) const

Gibt die Absender- QObject zurück, die mit der id verknüpft ist.

Siehe auch setMapping().

QObject *QSignalMapper::mapping(QObject *object) const

Gibt die Absender- QObject zurück, die mit dem ` object` verknüpft ist.

Diese Funktion überlädt die Methode ` QSignalMapper::mapping()`.

QObject *QSignalMapper::mapping(const QString &id) const

Diese Funktion überlädt die Funktion „ QSignalMapper::mapping()“.

void QSignalMapper::removeMappings(QObject *sender)

Entfernt alle Zuordnungen für „ sender “.

Dies geschieht automatisch, wenn zugeordnete Objekte zerstört werden.

Hinweis: Dadurch werden keine Signale getrennt. Wenn „ sender “ nicht zerstört wird, muss dies bei Bedarf explizit durchgeführt werden.

void QSignalMapper::setMapping(QObject *sender, QObject *object)

Fügt eine Zuordnung hinzu, sodass bei Auslösung von „ map()“ durch den „ sender “ das Signal „ mappedObject “ (object ) ausgegeben wird.

Pro Absender darf es höchstens ein Objekt geben.

Siehe auch ` mapping()`.

void QSignalMapper::setMapping(QObject *sender, const QString &text)

Fügt eine Zuordnung hinzu, sodass bei Auslösung von „ map()“ durch den „ sender “ das Signal „ mappedString “ (text ) ausgegeben wird.

Für jeden Absender darf es höchstens einen Text geben.

void QSignalMapper::setMapping(QObject *sender, int id)

Fügt eine Zuordnung hinzu, sodass bei Signalisierung von „ map()“ über den angegebenen „ sender “ das Signal „ mappedInt “ (id) ausgegeben wird.

Für jeden Absender darf es höchstens eine ganzzahlige ID geben.

Siehe auch ` mapping()`.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.