передача свойств элемента в главное окно с событиями в qt

У меня есть qmainwindow, в котором находится несколько qgraphicsitems (унаследованный класс от qgraphicsitems) в qgraphicsview. Эти элементы содержат их личные элементы, которые также унаследованы от qgraphicsitems. Эти элементы прослушивают события нажатия мыши. Эти элементы также имеют свои собственные другие свойства данных, такие как пользовательский идентификатор.

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

Каким образом я могу это сделать??


person zapumal    schedule 21.03.2012    source источник
comment
Попробуйте опубликовать весь EventMonitor.h, ошибка в строке 53, но мы ее не видим.   -  person Masci    schedule 21.03.2012
comment
Спасибо, я тоже прикрепил код   -  person zapumal    schedule 21.03.2012


Ответы (1)


Возможно, я не понял вашего вопроса, но я бы использовал СЛОТЫ и СИГНАЛЫ, а не события. Например, поместите сигнал на QGraphicsScene, что-то вроде:

void myItemClicked(int custom_id);

поэтому, когда ваши элементы перехватывают событие мыши, они могут сделать:

emit scene()->myItemClicked(my_id);

MainWindow может подключить этот сигнал, поступающий со сцены, к одному из своих слотов и изменить его свойства в соответствии с идентификатором элемента, поступающего вместе с сигналом.

В противном случае, если вы разрешите элементам вызывать методы QMainWindow (это выбор дизайна), вы можете сохранить указатель на него в (например) сцене, поэтому элементы могут делать:

scene()->mainwindow->aMethod();
person Masci    schedule 21.03.2012
comment
можно ли излучать сигнал QMainWindow из элемента ?? - person zapumal; 21.03.2012
comment
для этого вы должны хранить ссылку или указатель на QMainWindow где-то элементы могут получить его и вызвать его сигналы - person Masci; 21.03.2012
comment
Компилятор не позволяет мне передать ссылку на главное окно, что было моим первоначальным подходом, который не удался... - person zapumal; 21.03.2012
comment
ничто не мешает вам это сделать, может быть, вы должны показать нам код - person Masci; 21.03.2012