使用 Tab 键浏览 QTableView 行
Walk through QTableView rows using tab key
我有一个QTableView
,我希望用户能够选择整行而不是单个单元格。所以我更改了选择行为,如下所示。
table->setSelectionBehavior(QAbstractItemView::SelectRows)
但是现在,当单击Tab键时,它仍然遍历单个单元格而不是整行。我希望用户能够遍历每一行而不是单个单元格。
您必须从QTableView
类继承并覆盖keyPressEvent()
。例如:
#include <QTableView>
#include <QKeyEvent>
class CustomView : public QTableView
{
Q_OBJECT
// QWidget interface
protected:
void keyPressEvent(QKeyEvent *event) {
switch(event->key()) {
case Qt::Key_Tab: {
if(currentIndex().row() != model()->rowCount())
selectRow(currentIndex().row() + 1);
break;
}
default: QTableView::keyPressEvent(event);
}
}
public:
explicit CustomView(QWidget *parent = 0);
~CustomView(){}
signals:
public slots:
};
作为子类化QTableView
的替代方法,您可以在其上安装事件过滤器。例如,在这里我使用程序的 MainWindow 来过滤表视图上的事件,表视图是窗口的子小部件之一:
在主窗口中:
class MainWindow: public QMainWindow {
private:
bool eventFilter(QObject *watched, QEvent *event) override;
}
在主窗口中.cpp:
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->tableView &&
event->type() == QEvent::KeyPress &&
static_cast<QKeyEvent*>(event)->key() == Qt::Key_Tab)
{
//Handle the tab press here
return true; //return true to skip further event handling
}
//If the event was not a tab press on the tableView, let any other handlers do their thing:
return false;
}
然后,在MainWindow::MainWindow()
(或任何地方)中安装事件过滤器,如下所示:
ui->tableView->installEventFilter(this);
相关文章:
- QTableView:endMoveRows在模型中重置水平页眉大小
- 将QIcon添加到QTableView单元格
- 如何在QTableView中排序和更改日期格式
- 如何在 c++ 中按预定义的顺序循环浏览类实例?
- 浏览压缩文件与游览解压缩它们
- QTableview Search
- C++:在Windows中浏览名称中带有点的文件名
- CGAL:在浏览平面地图时使用类型"标记"
- QTableView 拉伸标头,但保持交互性
- qtableView 在订购项目到达时添加和显示它们任意?
- QTableView 不会更新数据
- 将自定义样式添加到 QTableview 中添加的按钮
- 如何高效浏览OpenCV仓库理解代码?
- QTableView:即时更改行计数
- 如何对QTableView忽略大小写进行排序
- 如何在C++中循环浏览自定义列表
- 如何在QT中的QtableView中找到我的按钮的行号
- 当在QTableView上丢失焦点时,失去背景颜色
- Qt - 为什么 QTableView 会丢失其模型()
- 使用 Tab 键浏览 QTableView 行