类似于QTableWidget::currentCellChanged的东西在QTableView中?

类似于QTableWidget::currentCellChanged的东西在QTableView中?,qt,qt4,Qt,Qt4,我希望在单击单元格或使用箭头键导航到QTableView的新单元格时发出信号。当我使用QTableWidget时,我使用了currentCellChanged信号。然而,我在QTableView中没有看到类似的信号-没有类似的吗 谢谢 David您应该重新执行以下操作: 您应该重新实现此功能: QTableWidget的currentCellChanged看起来没有那么简洁,但是QTableView确实继承了一些您可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按

我希望在单击单元格或使用箭头键导航到QTableView的新单元格时发出信号。当我使用QTableWidget时,我使用了currentCellChanged信号。然而,我在QTableView中没有看到类似的信号-没有类似的吗

谢谢


David

您应该重新执行以下操作:


您应该重新实现此功能:


QTableWidget的currentCellChanged看起来没有那么简洁,但是QTableView确实继承了一些您可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按键事件。我能看到的唯一真正的问题是,这些都取决于你是否也在使用模型,因为这都是基于模型的当前索引是否有效。

似乎没有什么东西像QTableWidget的currentCellChanged那样简洁,但QTableView确实继承了一些你可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按键事件。我能看到的唯一真正的问题是,这些都取决于您是否也在使用该模型,因为所有这些都基于模型的当前索引是否有效。

您可以使用:

  • qabstractemview::selectionModel()
    返回的
    QItemSelectionModel
    实例的信号
    currentChanged(QModelIndex,QModelIndex)
    ,或
  • 派生视图并重新定义函数
    qabstractemview::currentChanged(QModelIndex,QModelIndex)
PS:当参数是常量引用时(因此不单独使用
常量
,或不单独使用
&
),您可以在
信号
插槽
宏中同时省略
常量
&

connect(tableView->selectionModel(), 
        SIGNAL(currentChanged(QModelIndex, QModelIndex)), 
        ...
您可以使用:

  • qabstractemview::selectionModel()
    返回的
    QItemSelectionModel
    实例的信号
    currentChanged(QModelIndex,QModelIndex)
    ,或
  • 派生视图并重新定义函数
    qabstractemview::currentChanged(QModelIndex,QModelIndex)
PS:当参数是常量引用时(因此不单独使用
常量
,或不单独使用
&
),您可以在
信号
插槽
宏中同时省略
常量
&

connect(tableView->selectionModel(), 
        SIGNAL(currentChanged(QModelIndex, QModelIndex)), 
        ...

您还可以使用事件筛选器并重新实现eventFilter来管理索引更改,如下所示:

MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::uiClass)
{
    ui->setupUi(this);
    ui->tableView->installEvenFilter(this);
    connect( ui->tableView, SIGNAL(activated(QModelIndex)), this,SLOT(manageNewIndex(QModelIndex)));

}



bool MyWidget::eventFilter(QObject* watched, QEvent* event)
{
    bool retVal = true;
    if(watched == ui->tableView && event->type() == QEvent::KeyPress)
    {
        QModelIndex index = ui->tableView->currentIndex();
        int row = index.row();
        int col = index.column();

        if(((QKeyEvent*)event)->key() == Qt::Key_Down)
        {
            index = index.sibling(row+1,col);
        }else if(((QKeyEvent*)event)->key() == Qt::Key_Up)
        {
            index = index.sibling(row-1,col);
        }
        if(index.isValid())
        {
            ui->tableView->setCurrentIndex(index);
            manageNewIndex(index);
        }
        retVal = true;
    }
    else
        retVal =  QWidget::eventFilter(watched,event);

    return retVal;
}

您还可以使用事件筛选器并重新实现eventFilter来管理索引更改,如下所示:

MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::uiClass)
{
    ui->setupUi(this);
    ui->tableView->installEvenFilter(this);
    connect( ui->tableView, SIGNAL(activated(QModelIndex)), this,SLOT(manageNewIndex(QModelIndex)));

}



bool MyWidget::eventFilter(QObject* watched, QEvent* event)
{
    bool retVal = true;
    if(watched == ui->tableView && event->type() == QEvent::KeyPress)
    {
        QModelIndex index = ui->tableView->currentIndex();
        int row = index.row();
        int col = index.column();

        if(((QKeyEvent*)event)->key() == Qt::Key_Down)
        {
            index = index.sibling(row+1,col);
        }else if(((QKeyEvent*)event)->key() == Qt::Key_Up)
        {
            index = index.sibling(row-1,col);
        }
        if(index.isValid())
        {
            ui->tableView->setCurrentIndex(index);
            manageNewIndex(index);
        }
        retVal = true;
    }
    else
        retVal =  QWidget::eventFilter(watched,event);

    return retVal;
}

所以要做到这一点,我必须使用自定义视图?使用默认的QTableView没有办法做到这一点吗?所以要做到这一点,我必须使用自定义视图?使用默认的QTableView没有办法做到这一点吗?我使用了第一种方法-效果非常好!谢谢此->连接(此->表视图->选择模型(),信号(currentChanged(常数QModelIndex&,常数QModelIndex&)),插槽(SomethingChanged(常数QModelIndex&,常数QModelIndex&));我用了第一种方法-像一个迷人的作品!谢谢此->连接(此->表视图->选择模型(),信号(currentChanged(常数QModelIndex&,常数QModelIndex&)),插槽(SomethingChanged(常数QModelIndex&,常数QModelIndex&));