Слот может принимать меньше аргументов, чем предусмотрено сигналом. КАК? - Qt

У меня есть сигнал, объявление которого:

void removed(int sPI, int sWID , int ePI, int eWID);

Я хочу дважды подключить его к слоту, сначала нужны аргументы sPI и sWID, а другому слоту нужны ePI и eWID. Объявление слота:

void disconnect(int i, int wID = 0);

(Я хочу, чтобы когда remove() выдает, разъединить (sPI, sWID), а также разъединить (ePI, eWID))

Пожалуйста, помогите мне написать оператор QObject::connect(). Спасибо.


person user3237431    schedule 26.01.2014    source источник


Ответы (1)


Для первого «отключить (sPI, sWID)» просто выполните:

connect(x, SIGNAL(removed(int,int,int,int)), y, SLOT(disconnect(int,int)));

Третий и четвертый аргументы будут просто проигнорированы, а разъединение будет вызвано с первыми двумя.

Второе подключение, «отключение (ePI, eWID)», невозможно. Вам понадобится промежуточный слот, подключенный к remove():

Декларация:

Q_SLOTS:
    void somethingRemoved(int, int, int, int);

Определение:

void Foobar::somethingRemoved(int sPI, int sWID, int ePI, int eWID) {
    disconnect(sPI, sWID);
    disconnect(ePI, eWID);
}

Соединять:

connect(x, SIGNAL(removed(int,int,int,int)), foobar, SLOT(somethingRemoved(int,int,int,int)));
person Frank Osterfeld    schedule 26.01.2014
comment
Спасибо. В этом подходе другим решением является разделение сигнала на два сигнала, например: ' void removeS(int sPI, int sWID); & void removeE(int ePI, int eWID); ' - person user3237431; 26.01.2014