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);
相关推荐
程序leo源4 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
我在人间贩卖青春5 小时前
重学Qt——事件处理
qt
小宋0015 小时前
QT中控件qss样式修改
开发语言·qt
yuechuji0019 小时前
三、MPR(三平面重建)和三视图
qt
Hua-Jay11 小时前
OpenCV联合C++/Qt 学习笔记(二十二)----相机模型与投影及单目相机标定
c++·笔记·qt·opencv·学习·计算机视觉
小短腿的代码世界12 小时前
QCefView架构深度解析:从Chromium嵌入到Qt信号槽集成的完整技术链路
qt·架构
byxdaz13 小时前
Qt修改操作系统的日期与时间
qt
小短腿的代码世界13 小时前
Qt属性系统揭秘:从Q_PROPERTY宏到动态元对象系统的完整架构解析
开发语言·qt·架构
丁劲犇13 小时前
QodeAssist:为msys2 ucrt64 Qt Creator 注入 AI 灵魂的开源插件
开发语言·人工智能·qt
listhi52014 小时前
基于QT的串口心电波形实时显示系统
开发语言·qt