QTableView点击信号从未发出?
Posted
技术标签:
【中文标题】QTableView点击信号从未发出?【英文标题】:QTableView clicked signal never emited? 【发布时间】:2018-10-11 07:53:26 【问题描述】:我开始变得更加困惑。我不能像我想要的那样让 QTableView 发出它的信号。我将我的情况简化为不那么混乱的情况,即使在这种情况下,当我点击时我也无法获得任何信号。
例如,在该代码中,插槽“onClickedRow”在启动应用程序时被调用一次(我不知道为什么),但是我可以在任何地方随意点击,并且永远不会调用插槽:
import sys
from PySide2 import QtWidgets, QtCore, QtGui
class Message(QtCore.QAbstractItemModel):
def __init__(self):
super().__init__()
self.messageList = []
def addMessage(self, typeName, data):
self.messageList.append("type": typeName,
"data": data)
def data(self, index, role):
if not index.isValid():
return None
if role != QtCore.Qt.DisplayRole:
return None
item = self.messageList[index.row()]
if index.column() == 0:
return str(item["type"])
else:
return str(item["data"])
def headerData(self, section, orientation, role):
if orientation == QtCore.Qt.Horizontal:
if role == QtCore.Qt.DisplayRole:
if section == 0:
return "type"
else:
return "data"
return None
def parent(self, index):
if not index.isValid():
return QtCore.QModelIndex()
return QtCore.QModelIndex()
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
else:
return self.createIndex(row, column)
def flags(self, index):
if not index.isValid():
return QtCore.Qt.NoItemFlags
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def columnCount(self, parent):
return 2
def rowCount(self, parent):
return len(self.messageList)
class FormMessageJournal(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.layout = QtWidgets.QVBoxLayout()
self.messageTable = QtWidgets.QTableView(self)
self.messageTable.clicked.connect(self.onClickedRow())
self.messageList = Message()
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageTable.setModel(self.messageList)
self.layout.addWidget(self.messageTable)
self.setLayout(self.layout)
def onClickedRow(self, index=None):
print("Click !")
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = FormMessageJournal()
widget.show()
sys.exit(app.exec_())
只有我一个人有这种问题吗?
【问题讨论】:
【参考方案1】:self.messageTable.clicked.connect(self.onClickedRow())
改为:
self.messageTable.clicked.connect(self.onClickedRow)
【讨论】:
以上是关于QTableView点击信号从未发出?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QTableView 中发出输入单元格和离开单元格的信号