Russian Qt Forum
Ноябрь 26, 2024, 11:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSignalMapper. вызов слота  (Прочитано 7187 раз)
deaks
Гость
« : Декабрь 23, 2010, 11:57 »

Здравствуйте,
делал по примеру в ассистанте
Код:
QSignalMapper *signalMapper = new QSignalMapper(this);

        QString tmpStr = "cur";

        QAction *act = new QAction(tmpStr, this);
        ui->menLoad->addAction(act);
        signalMapper->setMapping(act, QString(tmpStr));
        connect(act, SIGNAL(triggered()), signalMapper, SLOT(map()));
        connect(signalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(loadCustomProject(QWidget*)));

и соответственно в слоте:
Код:
    QAction *act = dynamic_cast<QAction*>(widget);
    act->setText("new");

Но в итоге в слот не заходит. Где мог закрасться косяк?))
Записан
alexman
Гость
« Ответ #1 : Декабрь 23, 2010, 12:14 »

Q_OBJECT указал?
Записан
deaks
Гость
« Ответ #2 : Декабрь 23, 2010, 12:20 »

вы имеете в виду в описание класса? конечно
Записан
twp
Гость
« Ответ #3 : Декабрь 23, 2010, 12:24 »

Установка маппинга со строкой:
Код:
signalMapper->setMapping(act, QString(tmpStr));
А параметр как виджет?
Код:
connect(signalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(loadCustomProject(QWidget*)));
Записан
deaks
Гость
« Ответ #4 : Декабрь 23, 2010, 12:27 »

пардон, экспериментировал, но при этом так же результата не наблюдается

signalMapper->setMapping(act, act);
« Последнее редактирование: Декабрь 23, 2010, 12:29 от deaks » Записан
twp
Гость
« Ответ #5 : Декабрь 23, 2010, 12:29 »

act не виджет а значит будет испукаться другой сигнал: mapped ( QObject * object )
Записан
deaks
Гость
« Ответ #6 : Декабрь 23, 2010, 12:31 »

в общем, вместо QWidget поставил QObject и все заработало Подмигивающий

Большое спасибо Подмигивающий
Записан
deaks
Гость
« Ответ #7 : Декабрь 23, 2010, 12:31 »

twp,
я как раз так и сделал)спасибо!
Записан
twp
Гость
« Ответ #8 : Декабрь 23, 2010, 12:33 »

в таком случае я вообще не вижу смысл использования QSignalMapper с таким маппингом:
Код:
signalMapper->setMapping(act, act);
или это чисто ради эксперимента?
Записан
deaks
Гость
« Ответ #9 : Декабрь 23, 2010, 14:00 »

почему же нет смысла?

как это можно сделать кроме как через мэппинг или QObject->sender()?
Записан
twp
Гость
« Ответ #10 : Декабрь 23, 2010, 15:15 »

почему же нет смысла?

как это можно сделать кроме как через мэппинг или QObject->sender()?
Точно, в слоте можно получить отправителя сигнала через QObject::sender(), этот метод работает только в слоте, подоробнее лучше узнать в асистенте. Кроме того вместо dynamic_cast предпочтительней использовать qobject_cast
Записан
deaks
Гость
« Ответ #11 : Декабрь 23, 2010, 15:21 »

именно тут на форуме читал про то, что надо вместо получения отправителя, надо использовать мэппинг, по крайней мере это отвечает идеологии mvc)
Записан
twp
Гость
« Ответ #12 : Декабрь 24, 2010, 11:57 »

Интресное мнение  Улыбающийся Вообще-то к идеалогии mvc механизм сигнал-слотов не относится, просто в Qt механизм оповещений представлений о изменениях в модели основан на этом механизме. Тем более не относится к mvc QSignalMapper. Это довольно узко-специализированный класс
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 21.