QSignalMapper Class
QSignalMapperクラスは識別可能な送信者からのシグナルをバンドルします。詳細...
ヘッダー | #include <QSignalMapper> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
継承: | QObject |
パブリック関数
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) |
パブリックスロット
シグナル
void | mappedInt(int i) |
void | mappedObject(QObject *object) |
void | mappedString(const QString &text) |
詳細説明
このクラスは、パラメータなしのシグナルのセットを収集し、シグナルを送信したオブジェクトに対応する整数、文字列、またはウィジェットパラメータを持つシグナルを再発信します。ほとんどの場合、スロットにカスタムパラメータを渡すためにラムダを使うことができることに注意してください。この方がコストがかからず、コードもシンプルになります。
このクラスは、setMapping() を使って、特定の文字列、整数、オブジェクト、ウィジェットを特定のオブジェクトにマッピングすることをサポートしています。オブジェクトのシグナルは、map ()スロットに接続することができます。このスロットは、元のシグナル・オブジェクトに関連付けられた値を持つシグナル(mappedInt ()、mappedString ()、mappedObject ())を発信します。マッピングは、removeMappings()を使用して、後で削除することができます。
例例:(ツール・パレットのような)ボタン・グループを含むカスタム・ウィジェットを作成したいとします。clicked()
しかし、この例では、すべてのボタンを1つのスロットに接続し、クリックされたボタンによってスロットをパラメータ化します。
以下は、シンプルなカスタムウィジェットの定義です。このカスタムウィジェットは、クリックされたボタンのテキストが出力されるシグナルclicked()
を1つ持ちます:
class ButtonWidget : public QWidget { Q_OBJECT public: ButtonWidget(const QStringList &texts, QWidget *parent = nullptr); signals: void clicked(const QString &text); private: QSignalMapper *signalMapper; };
実装する必要がある関数はコンストラクタだけです:
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); }
テキストのリストがコンストラクタに渡される。シグナルマッパーが構築され、リスト内の各テキストに対してQPushButton が作成されます。各ボタンのclicked()
シグナルをシグナルマッパーのmap() スロットに接続し、シグナルマッパーに各ボタンからボタンのテキストへのマッピングを作成します。最後に、シグナルマッパーのmappedString() シグナルをカスタムウィジェットのclicked()
シグナルに接続します。ユーザがボタンをクリックすると、カスタムウィジェットは、ユーザがクリックしたボタンのテキストを引数とするclicked()
シグナルを出力します。
このクラスは、ラムダ関数がスロットとして使用できるようになる前は、ほとんど役に立ちました。上の例は、ラムダ関数に接続することで、QSignalMapperなしでよりシンプルに書き換えることができます。
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); } }
QObject 、QButtonGroup 、QActionGroupも参照して ください。
メンバ関数のドキュメント
[explicit]
QSignalMapper::QSignalMapper(QObject *parent = nullptr)
QSignalMapper を親parent で構築します。
[virtual noexcept]
QSignalMapper::~QSignalMapper()
QSignalMapper を破壊する。
[slot]
void QSignalMapper::map()
このスロットは、どのオブジェクトがシグナルを送るかに基づいてシグナルを発する。
[slot]
void QSignalMapper::map(QObject *sender)
このスロットはsender オブジェクトに基づいてシグナルを発する。
[signal]
void QSignalMapper::mappedInt(int i)
このシグナルは、整数マッピングが設定されたオブジェクトからmap() がシグナルされたときに発行される。オブジェクトのマッピングされた整数はi で渡される。
setMapping()も参照 。
[signal]
void QSignalMapper::mappedObject(QObject *object)
このシグナルは、オブジェクト・マッピングが設定されたオブジェクトからmap() が呼ばれたときに発せられる。マップによって提供されるオブジェクトはobject で渡される。
setMapping()も参照 。
[signal]
void QSignalMapper::mappedString(const QString &text)
このシグナルは、文字列マッピングが設定されたオブジェクトからmap() が呼ばれたときに発せられる。オブジェクトのマッピングされた文字列はtext で渡される。
setMapping()も参照 。
QObject *QSignalMapper::mapping(int id) const
id に関連付けられた送信者QObject を返す。
setMapping()も参照のこと 。
QObject *QSignalMapper::mapping(QObject *object) const
この関数は mapping()をオーバーロードする。
object に関連付けられた送信者QObject を返します。
QObject *QSignalMapper::mapping(const QString &id) const
この関数は mapping() をオーバーロードする。
void QSignalMapper::removeMappings(QObject *sender)
sender のマッピングをすべて削除する。
これはマッピングされたオブジェクトが破棄されるときに自動的に行われる。
注意: これはいかなるシグナルも切断しない。sender が破棄されない場合は、必要に応じて明示的に行う必要がある。
void QSignalMapper::setMapping(QObject *sender, QObject *object)
sender からシグナルmap() が送られると、シグナルmappedObject(object ) が送られるようにマッピングを追加する。
各送信者に対応するオブジェクトは 1 つまでです。
mapping()も参照してください 。
void QSignalMapper::setMapping(QObject *sender, const QString &text)
sender からシグナルmap() が送られると、シグナルmappedString(text ) が送られるようにマッピングを追加する。
各送信者に対応するテキストは最大1つである。
void QSignalMapper::setMapping(QObject *sender, int id)
与えられたsender からmap() がシグナルされると、シグナルmappedInt(id) が発せられるようにマッピングを追加する。
整数 ID は送信者ごとに最大 1 つまでです。
mapping()も参照 。
© 2025 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.