crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Определение источника сигнала
borune
  опции профиля:
сообщение 5.1.2011, 20:28
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Друзья, я еще не очень освоил кутэ, поэтому вынужден все время обращаться к вам. Вот и сейчас обращаюсь снова.

Мне надо реализовать следующее. Есть созданное мной окно QDialog'а. При работе у пользователя есть возможность добавлять элементы в это окно нажатием кнопок (конкретно добавляемыми элементами являются наследники класса QLabel, ну вообщем будем считать, что объекты QLabel).

Для работы с созданными объектами у меня есть список указателей на них.

Что требуется сделать. Требуется добавить к каждому такому элементу контекстное меню по правому клику мышью. А в этом меню надо реализовать некоторые стандартные действия (редактировать, удалить и т.д.). Меню добавить несложно, но вопрос у меня вот в чем. Насколько я понимаю, схема работы меню такова: выбор пункта (который задается объектом класса QAction) в контекстном меню эмитирует какой-то сигнал, объявленный в классе QAction и его родителях. Для перехвата этого сигнала требуется подключить требуемый сигнал соответствующего объекта к слоту-обработчику. Но, опять же, насколько я понимаю, механизм сигналов не позволяет определить источник сигнала. А мне нужно знать, на какой именно из объектов нажал пользователь, потому что работа (редактирование, удаление и т.д.) должна происходить только с тем объектом, на который нажал пользователь.

В идеале я бы хотел как-нибудь сделать так, чтобы при выборе пункта меню в слот приходил указатель на объект, по которому кликнул пользователь. Но как это сделать я никак не додумаюсь. Неужели иного способа, кроме как ловить координаты мыши в момент клика, и потом находить объект, который располагается по этим координатам, нельзя придумать?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 5.1.2011, 20:36
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


QObject *sender();


Сообщение отредактировал DEADHUNT - 5.1.2011, 20:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 5.1.2011, 21:13
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


дада. я сам тока что нашел этот метод)) спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 5.1.2011, 21:56
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


воспользовался твоим советом. Возник новый вопрос.

Если я соединяю сигнал, эмитируемый при клике на объект, со слотом-обработчиком, то метод sender() возвращает верное значение указателя на объект. А если я создаю контекстное меню (создаю QAction'ы, соединяю их с соответствующими слотами и добавляю к своим объектам), то метод sender() возвращает адрес QAction, а не объекта. Как же быть с контекстным меню?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 5.1.2011, 22:11
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


QSignalMapper?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.1.2011, 19:48
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(borune @ 5.1.2011, 23:56) *
то метод sender() возвращает адрес QAction, а не объекта.
под объектом понимается виджет? (QAction - объект)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 6.1.2011, 21:42
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 6.1.2011, 19:48) *
Цитата(borune @ 5.1.2011, 23:56) *
то метод sender() возвращает адрес QAction, а не объекта.
под объектом понимается виджет? (QAction - объект)



да, да, конечно, я неправильно выразился.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.1.2011, 0:12
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


borune, смотри вариант Kagami, лучше наверное не придумаешь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
borune
  опции профиля:
сообщение 7.1.2011, 0:16
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 152
Регистрация: 1.1.2011
Пользователь №: 2314

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ага. Спасибо! Попробую)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2020, 7:48