类似于QTableWidget::currentCellChanged的东西在QTableView中?
我希望在单击单元格或使用箭头键导航到QTableView的新单元格时发出信号。当我使用QTableWidget时,我使用了currentCellChanged信号。然而,我在QTableView中没有看到类似的信号-没有类似的吗 谢谢类似于QTableWidget::currentCellChanged的东西在QTableView中?,qt,qt4,Qt,Qt4,我希望在单击单元格或使用箭头键导航到QTableView的新单元格时发出信号。当我使用QTableWidget时,我使用了currentCellChanged信号。然而,我在QTableView中没有看到类似的信号-没有类似的吗 谢谢 David您应该重新执行以下操作: 您应该重新实现此功能: QTableWidget的currentCellChanged看起来没有那么简洁,但是QTableView确实继承了一些您可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按
David您应该重新执行以下操作:
您应该重新实现此功能:
QTableWidget的currentCellChanged看起来没有那么简洁,但是QTableView确实继承了一些您可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按键事件。我能看到的唯一真正的问题是,这些都取决于你是否也在使用模型,因为这都是基于模型的当前索引是否有效。似乎没有什么东西像QTableWidget的currentCellChanged那样简洁,但QTableView确实继承了一些你可以一起使用的东西,特别是用于鼠标输入的单击、输入和按下信号,以及用于键盘输入的按键事件。我能看到的唯一真正的问题是,这些都取决于您是否也在使用该模型,因为所有这些都基于模型的当前索引是否有效。您可以使用:
- 由
返回的qabstractemview::selectionModel()
实例的信号QItemSelectionModel
,或currentChanged(QModelIndex,QModelIndex)
- 派生视图并重新定义函数
qabstractemview::currentChanged(QModelIndex,QModelIndex)
常量
,或不单独使用&
),您可以在信号
和插槽
宏中同时省略常量
和&
:
connect(tableView->selectionModel(),
SIGNAL(currentChanged(QModelIndex, QModelIndex)),
...
您可以使用:
- 由
返回的qabstractemview::selectionModel()
实例的信号QItemSelectionModel
,或currentChanged(QModelIndex,QModelIndex)
- 派生视图并重新定义函数
qabstractemview::currentChanged(QModelIndex,QModelIndex)
常量
,或不单独使用&
),您可以在信号
和插槽
宏中同时省略常量
和&
:
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&));