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);
相关推荐
island13141 小时前
【QT】 控件 -- 显示类
开发语言·数据库·qt
FancySuMMer112 小时前
关于av_get_channel_layout_nb_channels函数
qt·ffmpeg
行十万里人生4 小时前
Qt 控件与布局管理
数据库·qt·microsoft·华为od·华为·华为云·harmonyos
daqinzl4 小时前
Qt调用ffmpeg库录屏并进行UDP组播推流
qt·ffmpeg·udp组播 推流
daqinzl4 小时前
Qt调用FFmpeg库实时播放UDP组播视频流
qt·ffmpeg·udp组播流
咬光空气18 小时前
Qt 5.14.2 学习记录 —— 십구 事件
数据库·qt·学习
geovindu1 天前
Qt Designer and Python: Build Your GUI
开发语言·qt
新之助小锅2 天前
Qt Creator 15.0.0如何更换主题和字体
开发语言·qt
浮梦终焉3 天前
【嵌入式】总结——Linux驱动开发(三)
linux·驱动开发·qt·嵌入式
练小杰3 天前
Linux系统 C/C++编程基础——基于Qt的图形用户界面编程
linux·c语言·c++·经验分享·qt·学习·编辑器