MyTetra Share
Делитесь знаниями!
Информация об отправителе сигнала
Время создания: 20.03.2016 22:41
Текстовые метки: Qt, signal, signals, slot, slots, сигнал, слот
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/0000000774/text.html на raw.github.com

В некоторых случаях может потребоваться информация об отправителе сигнала. Qt предоставляет функцию Qobject::sender(), которая возвращает указатель на объект, пославший сигнал.


Класс QSignalMapper необходим в ситуациях, когда много сигналов подключены к одному и тому же слоту, и этот слот должен реагировать на каждый сигнал по-разному.


Предположим что у нас есть три кнопки, которые определяют, какой файл мы хотим открыть: «Tax File», «Accounts File», or «Report File». Что бы открыть нужный файл мы соединяем их сигнал QPushButton::clicked() со слотом readFile(). Теперь используем функцию класса QSignalMapper — setMapping() — для преобразования всех сигналов в объект QSignalMapper.



signalMapper = new QSignalMapper(this);

signalMapper->setMapping(taxFileButton, QString("taxfile.txt"));

signalMapper->setMapping(accountFileButton, QString("accountsfile.txt"));

signalMapper->setMapping(reportFileButton, QString("reportfile.txt"));


connect(taxFileButton, SIGNAL(clicked()), signalMapper, SLOT (map()));

connect(accountFileButton, SIGNAL(clicked()), signalMapper, SLOT (map()));

connect(reportFileButton, SIGNAL(clicked()), signalMapper, SLOT (map()));



Теперь подключаем сигнал mapped() к слоту readFile() в котором разные файлы будут открыты в зависимости от нажатой кнопки.


connect(signalMapper, SIGNAL(mapped(const QString &)),

this, SLOT(readFile(const QString &)));



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования