2013-02-12 1 views
1

У меня есть QTableView, в котором и левой и правой кнопкой мыши результат мыши в какой-то работы.,Различия между левыми и правыми щелчками в QTableView

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

Я использую следующие соединений для этой цели в моей QMainWindow

connect(Table , SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(tableContextMenu(const QPoint&))); 
connect(Table , SIGNAL (clicked (const QModelIndex&)), this, SLOT(test())); 

Проблема довольно просто увидеть. Так как я использую сигнал clicked(), чтобы зафиксировать левый клик - правый захват тоже будет снят. Итак, если я нажму на кнопку правого клика, вместе с контекстным меню, действие , сохраненное для левого клика, также будет.

Как этого избежать? Просьба сообщить. Благодарю.

EDIT

Мой код устанавливаются следующим образом:

Table = new QTableView(this); 
TableLayout *t = new TableLayout(); 
Table->setModel(t); 
Table->setContextMenuPolicy(Qt::CustomContextMenu); 
connect(Table , SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(tableContextMenu(const QPoint&))); 

Это, как я делаю это для контекстного меню правой кнопки мыши, и все они определены в P14MainWindow конструктору, который является объектом от QMainWindow. Теперь, где именно я должен переопределить MouseReleaseEvent?

ответ

2

Чтобы запустить контекстное меню, выполните переопределение QTableView::contextMenuEvent(QContextMenuEvent* e) и аналогичным образом выполните переопределение QTableView::mouse...Event(QMouseEvent* event), чтобы поймать события мыши.

Затем используйте QTableView::indexAt(const QPoint& pos) const, чтобы вернуть индекс модели на сайт щелчка.

Вот пример обработки левой кнопкой мыши:

void Table::mouseReleaseEvent(QMouseEvent* event) 
{ 
    QTableView::mouseReleaseEvent(event); 

    if (event->button == Qt::LeftButton) { 
     test(); 
    } 
} 
+0

Я попробовал. Я поместил 'connect (Table, SIGNAL (mousePressEvent (QMouseEvent *)), это, SLOT (test (QMouseEvent *)));' и в 'test (QMouseEvent *)', я проверяю, какая кнопка была нажата и так далее. Но я всегда получаю сообщение в окне Debug, что ** Object :: connect: Нет такого сигнала QTableView :: mousePressEvent (QMouseEvent *) ** – user1173240

+0

Err ... Это не слоты. Это методы, которые получают события из очереди событий через диспетчер событий объекта. Прочтите документы: http://qt-project.org/doc/qt-4.8/eventsandfilters.html – cmannett85

+0

Ах..контекстное меню не проблема. Ум .. любая идея, как я могу это сделать, используя только сигнал 'clicked()'? Поэтому он входит в слот 'test()', и я могу определить, какая кнопка была нажата, избежать правого щелчка и просто продолжить, если был сделан щелчок левой кнопкой мыши? Это сделало бы вещи намного проще, чем переопределение. – user1173240

 Смежные вопросы

  • Нет связанных вопросов^_^