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);
相关推荐
钱彬 (Qian Bin)17 分钟前
项目实践11—全球证件智能识别系统(切换为PostgreSQL数据库)
人工智能·qt·fastapi
深蓝海拓1 小时前
PySide6从0开始学习的笔记(二) 控件(Widget)之容器类控件
笔记·qt·学习·pyqt
_OP_CHEN2 小时前
【从零开始的Qt开发指南】(十一)Qt常用控件之多元素控件与容器类控件深度解析
开发语言·qt·前端开发·多元素控件·gui开发·qt常用控件·容器类控件
我送炭你添花3 小时前
Pelco KBD300A 模拟器:06.用 PyQt5 实现 1:1 像素级完美复刻 Pelco KBD300A 键盘
python·qt·自动化·运维开发
大道随心3 小时前
【QT】自动化设备控制界面搭建
开发语言·qt·自动化
深蓝海拓3 小时前
PySide6从0开始学习的笔记(六) 控件(Widget)之按钮类
笔记·python·qt·学习·pyqt
深蓝海拓5 小时前
PySide6从0开始学习的笔记(七) 控件(Widget)之文字输入类控件
笔记·python·qt·学习·pyqt
郝学胜-神的一滴5 小时前
使用Qt OpenGL开发俄罗斯方块:从零到一实现经典游戏
c++·qt·程序人生·游戏·设计模式·系统架构·图形渲染
海涛高软5 小时前
Qt菜单项切换主界面
开发语言·qt
水煎包V:YEDIYYDS8885 小时前
QT 在 QML中 嵌入显示qwidget界面显示的两种方式,已在项目中验证
qt·qml·qt开发·qwidget