Вызов реализации базового класса

Мне удалось имитировать событие правого клика, создав подкласс QTableWidget:

заголовочный файл:

#ifndef QRIGHCLICKTABLE_H
#define QRIGHCLICKTABLE_H

#include <QTableWidget>
#include <QMouseEvent>

class QRightClickTable : public QTableWidget
{
    Q_OBJECT

public:
    explicit QRightClickTable(QWidget *parent = 0);

private slots:
    void mousePressEvent(QMouseEvent *e);

signals:
    void rightClicked();

public slots:

};

#endif // QRIGHCLICKTABLE_H

cpp-файл

QRightClickTable::QRightClickTable(QWidget *parent) :
    QPushButton(parent)
{
}

void QRightClickTable::mousePressEvent(QMouseEvent *e)
{
    if(e->button()==Qt::RightButton)
        emit rightClicked();
}

QRightClickTable *button = new QRightClickTable(this);
ui->gridLayout->addWidget(button);
connect(button, SIGNAL(rightClicked()), this, SLOT(onRightClicked()));


void MainWindow::onRightClicked()
{
    qDebug() << "User right clicked me";
}

Теперь щелчок правой кнопкой мыши работает правильно, но с QTableWidget есть другие проблемы: все остальные события мыши, такие как щелчок левой кнопкой мыши для выбора ячейки, больше не работают. Вы можете помочь мне? Я знаю, что мне нужно вызвать реализацию базового класса в моем переопределении mousePressEvent, вы могли бы показать мне, как с небольшим фрагментом кода?


person user3204810    schedule 01.06.2014    source источник


Ответы (1)


Измените обработчик событий следующим образом:

void QRightClickTable::mousePressEvent(QMouseEvent *e) {
    if(e->button()==Qt::RightButton) {
        emit rightClicked();
    } else {
        QTableWidget::mousePressEvent(e);
    }
}
person Murat Şeker    schedule 01.06.2014