c++ - 如何右键单击删除表格行

标签 c++ qt qt5 qtablewidget

我正在尝试这样做,以便您可以右键单击表格小部件中的一行并将其删除。我无法找到这方面的有效示例。非常感谢任何帮助。

这是我更新的代码,以更好地可视化:

bool MainWindow::eventFilter(QObject *obj, QEvent *event) {
    if (obj == ui->tableWidgetOther->viewport() ) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
        if (mouseEvent->button() == Qt::RightButton) {
            QTableWidgetItem *cell = ui->tableWidgetOther->currentItem();
            int row = cell->row();
            ui->tableWidgetOther->removeRow(row);
        }
    }
}

最佳答案

当您创建QTableWidget时使用 Qt Designer 并设置行和列不一定每个网格都有 QTableWidgetItem关联所以最好不要使用 currentItem() .

所以不要使用 QTableWidgetItem你应该使用 QModelIndex使用indexAt()方法和事件的位置。

由于要求是右键单击,因此使用 cellClicked 是不正确的信号。在这种情况下,我将使用 eventFilter() .

ui->tableWidget->viewport()->installEventFilter(this);
bool MainWindow::eventFilter(QObject *obj, QEvent *event) { 
    if (obj == ui->tableWidget->viewport() and 
        event->type() == QEvent::MouseButtonPress) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
        if (mouseEvent->button() == Qt::RightButton) {
            QModelIndex ix = ui->tableWidget->indexAt(mouseEvent->pos());
            if(ix.isValid())
                ui->tableWidget->removeRow(ix.row());
        }
    }
    return QMainWindow::eventFilter(obj, event);
}

如果您想构建自己的QTableWidget然后在 mousePressEvent() 中实现相同的逻辑方法:

void TableWidget::mousePressEvent(QMouseEvent *event)
{
    if(event->buttons() == Qt::RightButton){
        QPoint p = viewport()->mapFromGlobal(mapToGlobal(event->pos()));
        QModelIndex ix = indexAt(p);
        if(ix.isValid())
            removeRow(ix.row());
    }
    QTableWidget::mousePressEvent(event);
}

关于c++ - 如何右键单击删除表格行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212420/

相关文章:

c++ - 不同原始类型的乘法速度

android - 当通过 primusrun 运行 AVD 时,我得到 "version ` GLIBCXX_3.4.2 1' not found"并通过 optirun,我得到 CXXABI _"1.3.* not found"

python - 用于桌面应用程序的 Camelot

c++ - QT:使用 move 语义将信号连接到插槽

c++ - 如何将信号转发到私有(private)信号?

c++ - 无法在 Intel Xeon Phi 上执行二进制错误

c++ - 如何在 C++ 中存储 1000000 位整数

c++ - VTKActor 在渲染后不可见但在相机->resetview() 上可见

c++ - QMimeData::data()函数调用花费太长时间才能完成

python - PyQt5 失败并显示神秘消息