QSignalMapper Class
QSignalMapper 클래스는 식별 가능한 발신자의 신호를 번들로 묶습니다. 더 보기...
Header: | #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()
신호를 자체 사용자 지정 슬롯에 연결하는 것이지만, 이 예에서는 모든 버튼을 단일 슬롯에 연결하고 클릭한 버튼에 따라 슬롯을 매개변수화하려고 합니다.
다음은 클릭한 버튼의 텍스트와 함께 단일 신호인 clicked()
가 방출되는 간단한 사용자 지정 위젯의 정의입니다:
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)
부모가 parent 인 QSignalMapper를 구축합니다.
[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
이 함수는 맵핑()을 오버로드합니다.
void QSignalMapper::removeMappings(QObject *sender)
sender 에 대한 모든 매핑을 제거합니다.
이 작업은 매핑된 개체가 삭제되면 자동으로 수행됩니다.
참고: 이렇게 해도 신호가 끊어지지는 않습니다. sender 이 파괴되지 않으면 필요한 경우 명시적으로 이 작업을 수행해야 합니다.
void QSignalMapper::setMapping(QObject *sender, QObject *object)
sender 에서 map() 신호를 보내면 mappedObject(object ) 신호가 전송되도록 매핑을 추가합니다.
각 발신자당 최대 하나의 객체만 있을 수 있습니다.
mapping()도 참조하세요 .
void QSignalMapper::setMapping(QObject *sender, const QString &text)
sender 에서 map() 신호를 보내면 mappedString(text ) 신호가 전송되도록 매핑을 추가합니다.
각 발신자당 최대 하나의 텍스트만 있을 수 있습니다.
void QSignalMapper::setMapping(QObject *sender, int id)
지정된 sender 에서 map() 신호를 보내면 mappedInt(id) 신호가 전송되도록 매핑을 추가합니다.
각 발신자에 대해 최대 하나의 정수 ID만 있을 수 있습니다.
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.