Я не думаю, что это очень вероятный сценарий, но это может произойти.
«Простой» способ убедиться в том, какая кнопка была нажата, - это создать подкласс QTableView
(или используемое представление и переопределить mouseReleaseEvent
.
void mouseReleaseEvent(QMouseEvent * event)
{
// store the button that was clicked
mButton = event->button();
// Now call the parent's event
QTableView::mouseReleaseEvent(event);
}
По умолчанию mouseReleaseEvent
испускает сигнал clicked
, если нажата позиция вида
Если пользователь нажимает мышь внутри вашего виджета, а затем перетаскивает
мыши в другое место, прежде чем отпустить кнопку мыши, ваш
Виджет получает событие выпуска. Функция будет излучать
сигнал clicked (), если элемент был нажат.
Хитрость заключается в том, чтобы поймать сигнал clicked
в вашем производном классе и подать новый сигнал, который кроме модельного индекса будет также содержать кнопку.
// Define your new signal in the header
signals:
void clicked(QModelIndex, Qt::MouseButton);
// and a slot that will emit it
private slots:
void clickedSlot(QModelIndex);
// In the constructor of your derived class connect the default clicked with a slot
connect(this, SIGNAL(clicked(QModelIndex), this, SLOT(clickedSlot(QModelIndex)));
// Now the slot just emits the new clicked signal with the button that was pressed
void clickedSlot(QModelIndex i)
{
emit clicked(i, mButton);
}
Вы можете сделать что-то похожее с mousePressEvent
, если вам также нужен сигнал pressed
.