c++ - 调用基类实现

标签 c++ qt class subclass

我能够通过子类化 QTableWidget 来模拟 Right-Click 事件:

头文件:

#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 覆盖中调用基类实现,你可以用一小段代码告诉我如何做?

最佳答案

像这样更改您的事件处理程序:

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

关于c++ - 调用基类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984293/

相关文章:

c++ - 在 centOS7 上安装 ceres-solver 并让 helloworld.cc 工作

c++ - 在函数内初始化 std::array

c++ - 我的转置函数有什么问题?

c++ - g++ 创建进程 : no such file or directory

c++ - 在 QTCreator 中使用 MinGW 编译 c++ 和 cuda 代码

C++ 为什么 operator-> 会中断嵌套的 operator() 调用?

java - 错误检查未注册

iphone - 调用单例类以保持套接字连接打开

c++ - std::vector ctor 在类外编译,但不在类内?

c++ - QT QGraphicsScene 绘制圆弧