我能够通过子类化 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/