Spec-Zone.ru › Qt 5.11

Класс QSignalMapper

Класс QSignalMapper объединяет сигналы от идентифицируемых отправителей. Подробнее...

Заголовок: #include <QSignalMapper>
qmake: QT += core
Наследует: QObject

Этот класс устарел. Он предоставляется для поддержки старого исходного кода. Мы настоятельно рекомендуем не использовать его в новом коде.

  • Список всех членов, включая унаследованные

Открытые функции

QSignalMapper(QObject *parent = nullptr)
virtual ~QSignalMapper()
QObject * mapping(int id) const
QObject * mapping(const QString &id) const
QObject * mapping(QWidget *widget) const
QObject * mapping(QObject *object) const
void removeMappings(QObject *sender)
void setMapping(QObject *sender, int id)
void setMapping(QObject *sender, const QString &text)
void setMapping(QObject *sender, QWidget *widget)
void setMapping(QObject *sender, QObject *object)
  • 32 открытых функций, унаследованных от QObject

Открытые слоты

void map()
void map(QObject *sender)
  • 1 открытый слот, унаследованный от QObject

Сигналы

void mapped(int i)
void mapped(const QString &text)
void mapped(QWidget *widget)
void mapped(QObject *object)
  • 2 сигнала, унаследованные от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 11 статических открытых членов, унаследованных от QObject
  • 9 защищённых функций, унаследованных от QObject

Подробное описание

Класс QSignalMapper объединяет сигналы от идентифицируемых отправителей.

Этот класс собирает набор сигналов без параметров и повторно отправляет их с целым числом, строкой или параметрами виджетов, соответствующими объекту, отправившему сигнал.

Класс поддерживает отображение конкретных строк или целых чисел с конкретными объектами с помощью setMapping(). Сигналы объектов затем могут быть подключены к слоту map(), который отправит сигнал mapped() со строкой или целым числом, связанными с исходным объектом сигнализации. Отображения можно удалить позже с помощью removeMappings().

Пример: Допустим, мы хотим создать пользовательский виджет, содержащий группу кнопок (например, палитру инструментов). Один подход заключается в подключении сигнала каждой кнопки к своему собственному пользовательскому слоту; но в этом примере мы хотим подключить все кнопки к одному слоту и параметризовать слот кнопкой, которая была нажата.

Вот определение простого пользовательского виджета, у которого есть один сигнал, clicked(), который отправляется со строкой текста нажатой кнопки:

class ButtonWidget : public QWidget
{
    Q_OBJECT

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

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;
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, SIGNAL(mapped(QString)),
            this, SIGNAL(clicked(QString)));

    setLayout(gridLayout);
}

В конструктор передаётся список текстов. Создаётся сигнал-маппер, и для каждого текста в списке создаётся кнопка QPushButton. Мы подключаем сигнал каждой кнопки clicked() к слоту map() сигнал-маппера и создаём отображение в сигнал-маппере от каждой кнопки к тексту этой кнопки. Наконец, мы подключаем сигнал mapped() сигнал-маппера к сигналу пользовательского виджета clicked(). Когда пользователь нажимает кнопку, пользовательский виджет отправит единственный clicked() сигнал, аргументом которого будет текст кнопки, которую нажал пользователь.

Этот класс был в основном полезен до того, как лямбда-функции могли использоваться как слоты. Приведённый выше пример можно переписать проще без QSignalMapper путём подключения к лямбда-функции.

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

См. также QObject, QButtonGroup и QActionGroup.

Документация по функциям-членам

QSignalMapper::QSignalMapper(QObject *parent = nullptr)

Конструирует QSignalMapper с родителем parent.

[virtual] QSignalMapper::~QSignalMapper()

Уничтожает QSignalMapper.

[slot] void QSignalMapper::map()

Этот слот отправляет сигналы на основе того, какой объект отправляет ему сигналы.

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

Этот слот отправляет сигналы на основе объекта sender.

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

Этот сигнал отправляется, когда map() сигнализируется объектом, для которого установлено отображение целого числа. Переданное значение целого числа объекта в i.

Примечание: Сигнал mapped перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобный помощник для получения указателя на функцию, как показано в этом примере:

connect(signalMapper, QOverload<int>::of(&QSignalMapper::mapped),
    [=](int i){ /* ... */ });

См. также setMapping().

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

Этот сигнал отправляется, когда map() сигнализируется объектом, для которого установлено строковое отображение. Переданная строка объекта в text.

Примечание: Сигнал mapped перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобный помощник для получения указателя на функцию, как показано в этом примере:

connect(signalMapper, QOverload<const QString &>::of(&QSignalMapper::mapped),
    [=](const QString &text){ /* ... */ });

См. также setMapping().

[signal] void QSignalMapper::mapped(QWidget *widget)

Этот сигнал отправляется, когда map() сигнализируется объектом, для которого установлено отображение виджета. Переданный виджет объекта в widget.

Примечание: Сигнал mapped перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобный помощник для получения указателя на функцию, как показано в этом примере:

connect(signalMapper, QOverload<QWidget *>::of(&QSignalMapper::mapped),
    [=](QWidget *widget){ /* ... */ });

См. также setMapping().

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

Этот сигнал отправляется, когда map() сигнализируется объектом, для которого установлено отображение объекта. Переданный объект из отображения в object.

Примечание: Сигнал mapped перегружен в этом классе. Для подключения к этому сигналу с помощью синтаксиса указателя на функцию Qt предоставляет удобный помощник для получения указателя на функцию, как показано в этом примере:

connect(signalMapper, QOverload<QObject *>::of(&QSignalMapper::mapped),
    [=](QObject *object){ /* ... */ });

См. также setMapping().

QObject *QSignalMapper::mapping(int id) const

Возвращает отправителя QObject, который ассоциирован с id.

См. также setMapping().

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

Эта функция перегружает mapping().

QObject *QSignalMapper::mapping(QWidget *widget) const

Эта функция перегружает mapping().

Возвращает отправителя QObject, связанного с widget.

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

Эта функция перегружает mapping().

Возвращает отправителя QObject, связанного с object.

void QSignalMapper::removeMappings(QObject *sender)

Удаляет все сопоставления для sender.

Это происходит автоматически при уничтожении сопоставленных объектов.

Примечание: Это не отключает никакие сигналы. Если sender не уничтожается, то это необходимо сделать явно, если требуется.

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

Добавляет сопоставление, так что при поступлении сигнала map() от данного sender, генерируется сигнал mapped(id).

Для каждого отправителя может быть только один целочисленный идентификатор.

См. также mapping().

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

Добавляет сопоставление, так что при поступлении сигнала map() от sender, генерируется сигнал mapped(text).

Для каждого отправителя может быть только одно текстовое значение.

void QSignalMapper::setMapping(QObject *sender, QWidget *widget)

Добавляет сопоставление, так что при поступлении сигнала map() от sender, генерируется сигнал mapped(widget).

Для каждого отправителя может быть только один виджет.

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

Добавляет сопоставление, так что при поступлении сигнала map() от sender, генерируется сигнал mapped(object).

Для каждого отправителя может быть только один объект.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qsignalmapper.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API