Qt QTableView模拟表格点击事件

Qt QTableView模拟表格点击事件

如题,QTableView 的表格有时候需要通过代码进行模拟点击 指定单元格,笔者网络上没找到答案,故分享出来。

笔者在tableView中使用了委托控件QComboBox,用鼠标单击能正常使用,有需求需要代码实现点击效果。

笔者最开始尝试 给tableView发送clicked消息,没起效果。

c++ 复制代码
auto newIndex = ui->tableViewFile->model()->index(row, col);
emit ui->tableViewFile->clicked(newIndex);

继续尝试使用 postEvent ,事件使用 QEvent::MouseButtonDblClick 双击事件 也没起效果。

c++ 复制代码
auto newIndex = ui->tableViewFile->model()->index(row, col);
auto widget = ui->tableViewFile->indexWidget(newIndex);
QMouseEvent* evt = new QMouseEvent(QEvent::MouseButtonDblClick,
                                   QPointF(1,1),
                                   Qt::LeftButton,
                                   Qt::LeftButton,
                                   Qt::NoModifier);
QCoreApplication::postEvent(widget, evt);

最后经过不断尝试,如下代码可行。

c++ 复制代码
auto newIndex = ui->tableViewFile->model()->index(row, col);
//注意这一步,获取要点击的单元格的位置信息
auto rect = ui->tableViewFile->visualRect(newIndex);
//模拟鼠标点击,一次鼠标按下,一次鼠标释放
QPointF point(rect.x() + 1,rect.y() + 1);
QMouseEvent* evt1 = new QMouseEvent(QEvent::MouseButtonPress,
                                   point,
                                   Qt::LeftButton,
                                   Qt::LeftButton,
                                   Qt::NoModifier);

QMouseEvent* evt2 = new QMouseEvent(QEvent::MouseButtonRelease,
                                    point,
                                    Qt::LeftButton,
                                    Qt::LeftButton,
                                    Qt::NoModifier);
//这一步很关键,不是给tabview发送事件,而是给tableview的viewport widget。
auto widget = ui->tableViewFile->viewport();
QCoreApplication::postEvent(widget, evt1);
QCoreApplication::postEvent(widget, evt2);
相关推荐
海绵波波10740 分钟前
Qt操作主/从视图及XML——实例:汽车管理系统
xml·qt·汽车
Fairy_sevenseven1 小时前
【二十八】【QT开发应用】模拟WPS Tab
开发语言·qt·wps
Death2002 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
niu_sama2 小时前
基于muduo库函数实现protobuf协议的通信
开发语言·qt
不写八个2 小时前
Qt教程(001):Qt概述与安装
开发语言·qt
Death2002 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
一律清风12 小时前
QT-文件创建时间修改器
c++·qt
不知所云,13 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
Death20013 小时前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导13 小时前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt