Здравствуйте
У меня есть QAbstractTableModel, установленная в QTableView. Я хочу, чтобы по нажатию правой кнопкой мыши на определенный элемент модели кое-что происходило (в моем случае появлялось некое меню).
Можете подсказать, как это сделать?
Вариант 1.
Необходимо пронаследовать свой View от QTableView и переопределить виртуальные методы обработки событий
C++ (Qt)
virtual void dragEnterEvent ( QDragEnterEvent * event )
virtual void dragLeaveEvent ( QDragLeaveEvent * event )
virtual void dragMoveEvent ( QDragMoveEvent * event )
virtual void dropEvent ( QDropEvent * event )
virtual bool event ( QEvent * event )
virtual void focusInEvent ( QFocusEvent * event )
virtual bool focusNextPrevChild ( bool next )
virtual void focusOutEvent ( QFocusEvent * event )
virtual void inputMethodEvent ( QInputMethodEvent * event )
virtual void keyPressEvent ( QKeyEvent * event )
virtual void mouseDoubleClickEvent ( QMouseEvent * event )
virtual void mouseMoveEvent ( QMouseEvent * event )
virtual void mousePressEvent ( QMouseEvent * event )
virtual void mouseReleaseEvent ( QMouseEvent * event )
virtual void resizeEvent ( QResizeEvent * event )
virtual void timerEvent ( QTimerEvent * event )
virtual bool viewportEvent ( QEvent * event )
Вариант 2.
Присоединиться к сигналам QAbstractItemView (он же QTableView) и обрабатывать их, определяя по косвенным признакам, что произошло
C++ (Qt)
void activated ( const QModelIndex & index )
void clicked ( const QModelIndex & index )
void doubleClicked ( const QModelIndex & index )
void entered ( const QModelIndex & index )
void pressed ( const QModelIndex & index )
void viewportEntered ()
Вариант 3.
Если нужно только контекстное меню, то присоединиться к сигналу QWidget
C++ (Qt)
void customContextMenuRequested ( const QPoint & pos )