本文主要是介绍Qt QTableView模拟表格点击事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Qt QTableView模拟表格点击事件
如题,QTableView 的表格有时候需要通过代码进行模拟点击 指定单元格,笔者网络上没找到答案,故分享出来。
笔者在tableView中使用了委托控件QComboBox,用鼠标单击能正常使用,有需求需要代码实现点击效果。
笔者最开始尝试 给tableView发送clicked消息,没起效果。
auto newIndex = ui->tableViewFile->model()->index(row, col);
emit ui->tableViewFile->clicked(newIndex);
继续尝试使用 postEvent ,事件使用 QEvent::MouseButtonDblClick 双击事件 也没起效果。
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);
最后经过不断尝试,如下代码可行。
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);
这篇关于Qt QTableView模拟表格点击事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!