Как определить, кто испустил сигнал? - PullRequest
5 голосов
/ 10 января 2011

Я разрабатываю приложение на PyQt, мне нравится модель сигнального слота, но есть ли способ определить источник сигнала?Я надеюсь, что есть способ, потому что он позволит писать более общий код без определения большого количества слотов для каждого подобного сигнала.

Ответы [ 3 ]

18 голосов
/ 10 января 2011

Я думаю, что я открыл вопрос слишком рано, потому что я нашел ответ на Google самостоятельно. Когда слот активируется эмиттером, указатель эмиттера сохраняется и может быть получен с помощью

QObject::sender()

и, как следствие, к PyQt можно получить доступ:

@QtCore.pyqtSlot()
def someSlot(self):
    self.sender()
1 голос
/ 18 сентября 2012

Возможно, вы захотите заглянуть в класс QSignalMapper , поскольку он предоставляет средства для привязки параметров типа int, string или widget к объекту, который отправляет данный сигнал. Основным ограничением является то, что отображаемый сигнал / слот должен быть без параметров.

Пример C ++ из документации QT4.7 :

 ButtonWidget::ButtonWidget(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(const QString &)),
             this, SIGNAL(clicked(const QString &)));

     setLayout(gridLayout);
 }

Вы можете найти пример PyQT4 здесь , однако, когда у меня будет возможность, я попытаюсь добавить простой пример PyQT4.

0 голосов
/ 10 января 2011

Обратите внимание, что это не говорит вам, например.какая ячейка в элементе управления сеткой была выбрана - только сам дескриптор элемента управления сеткой.

Появилась новая книга Advanced Qt, в которой много подробностей о продвинутой маршрутизации сигналов / слотов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...