在qtableView中编辑单元格之后,如何避免使用选项卡键进行编辑模式

How to avoid edit mode when I advance with TAB key after edit a cell in a QTableView?

本文关键字:编辑 选项 模式 何避免 qtableView 单元格 之后      更新时间:2023-10-16

这是我的问题。当我在qtableView中编辑单元格时,如果我按下选项卡键,我会希望这样做,但是当前单元格会更新,但是下一个单元格不在编辑模式中。

我尝试在表中创建一个EventFilter,但它行不通。如果我在代表的编辑小部件中创建EventFilter。这是我在qtableView中尝试的事件滤光器的尝试。我的想法是,如果当前单元格在最后一列和行中,并且当前行不是空,则我插入另一行(这可以正常工作),如果我在编辑任何单元格,当我按下标签时,我可以将单元格,但没有编辑模式

这是代码的片段:

bool MiTabla::eventFilter(QObject *watched, QEvent *e)
{
    if (e->type() == QEvent::KeyPress)
    {
        QModelIndex indice = this->currentIndex();
        QKeyEvent *ke =static_cast<QKeyEvent*>(e);
        switch (ke->key())
        {
        case (Qt::Key_Delete):
        {
            if (this->selectionModel()->isRowSelected(indice.row(),QModelIndex()))
            {
                //borrarLineas();
            }
            else
            {
                this->model()->setData(this->currentIndex(),"",Qt::EditRole);
            }
            break;
        }
        case (Qt::Key_Tab):
        {
            if (indice.row() == this->model()->rowCount(QModelIndex())-1
                    && indice.column() == this->model()->columnCount(QModelIndex())-1
                    && !NombreVacio())
            {
                this->model()->insertRow(this->model()->rowCount(QModelIndex()));
                QModelIndex ind = this->model()->index(indice.row()+1,0);
                this->setCurrentIndex(ind);
            }
            else //this doesn't work
            {
                QModelIndex ind = this->model()->index(indice.row(),indice.column()+1);
                this->setCurrentIndex(ind);
            }
            break;

谢谢。我已经解决了它。我在委托类中的 eventfilter()函数(从qStyledItemdelegate取下)如下:

bool DelegadoNombre::eventFilter(QObject *obj, QEvent* event)
{
    if (event->type()==QEvent::KeyPress)
    {
        QKeyEvent* key = static_cast<QKeyEvent*>(event);
        if (key->key()==Qt::Key_Tab || key->key()==Qt::Key_Enter || key->key()==Qt::Key_Return)
        {
            QLineEdit *editor=qobject_cast<QLineEdit*>(obj);
            emit commitData(editor);
            emit closeEditor(editor, QStyledItemDelegate::NoHint);
        }
        else
        {
            return QObject::eventFilter(obj, event);
        }
        return false;
    }
    else
    {
        return QObject::eventFilter(obj, event);
    }
    return false;
}

此功能向代表的编辑说,如果按下选项卡键,则必须提交数据并关闭编辑器,但在编辑模式下 qStyledIteMdelegate :: nohint noth no nowe oper oper the NEXT编辑器。另外,返回false以允许到表使用此事件