PYQT中如何获取Tableview中单击的单元格内容

问题描述

在QT编程中,我们经常会用到TableView这个控件,他可以通过自定义的数据模型来显示数据,出镜率非常高。
但本篇文章,我重点不是来介绍TableView控件的具体用法。而是介绍在使用该控件中遇到如下场景的解决办法,希望能对你有用。
场景描述如下:

在TableView控件中,需要监测用户单击事件,进而获取本次点击的单元格或者行。注意不是选中。该如何做?

解决思路

  • 根据需求,首先得清楚,用户点击后,具体要实现什么样的功能。编写这个函数,我们况且称他为消息接收函数吧。
  • 控件与接收函数之间绑定clicked事件

接收函数

在接收函数中,我们如何知道当前点击是哪一行?这块比较关键。

tableview的clicked信号有一个QModelIndex的参数&index,直接调用index.data().tostring()就可以获取数据了
上面这句话描述,可以通过事件携带的index,来获取具体的行号.

类似用法如下:

1def doubleClickedHandle(self, index):
2    text = self.model().item(index.row(),0).text() 
3    #单元格没有值时会出错,None type没有text()这个方法,如有需要自己catch
4    self.doubleClickedItem.emit(text)

事件绑定

这个就比较简单。

1table.clicked.connect(self.doubleClickedHandle)

最后

关于自定义信号,需要掌握以下几个点:

  1. 信号的声明: 信号名 = pyqtSignal(类型)
  2. 信号的触发: 信号名.emit(信号内容)
  3. 信号的接收: 信号所在类实例.信号名.connect(接收函数)

你可能感兴趣的:(程序人生)