PyQt应用程序工作正常,但当我关闭它时,Python会显示以下消息:
"Object::connect: No such signal QObject::dataChanged(QModelIndex,QModelIndex)"
这是什么原因?程序中没有dataChanged
信号。
编辑: MWE证明了错误:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
import ui_DBMainWindow
global Mw, Table
Id, Name, Size = range(3)
class TTable():
pass
Table = TTable()
class TMainWindow(QMainWindow, ui_DBMainWindow.Ui_MainWindow):
def __init__(self, parent = None):
global Table
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.showMaximized()
self.mapper = QDataWidgetMapper(self)
self.mapper.setModel(Table.Model) # if this line is commented out, error disappear
def main():
global Mw, Table
QApp = QApplication(sys.argv)
DB = QSqlDatabase.addDatabase("QSQLITE")
DB.setDatabaseName("1.db")
Table.Model = QSqlTableModel()
Table.Model.setTable("MainTable")
Table.Model.select()
Mw = TMainWindow()
QApp.exec_()
if __name__ == "__main__":
main()
编辑2:1.db
是包含表MainTable
的数据库,包含3个字段:Id
(自动增量隐藏整数键),Name
(字符串),{{1} } (整数)。它可以是空的,同样的错误。
档案Size
:
ui_DBMainWindow.py
答案 0 :(得分:1)
你能从你的应用程序中提供一些代码吗?
是否存在以下类型或其后代的任何实例?
QAbstractItemModel
,QAbstractItemView
,例如QListView
,QTreeView
等等。尝试捕捉任何地方,你把东西连接到那些,而不是特别是那个信号。您需要查看,当代码中的这些后代类型发出dataChanged
时,感谢上帝,Qt是开源的。
看来你的应用程序认为,某个对象是QAbstractItemModel或QAbstractItemView后代,不管它是不是,并试图将一个槽连接到它的dataChanged
信号。
PS。当您通过uic编译某个接口时,生成的类继承自object
,而不是QtGui.QMainWindow
或smth。也许它有点相关。
答案 1 :(得分:0)
您正在调用的方法之一尝试将插槽连接到dataChanged
上名为QObject
的信号,这显然不会发出这样的信号。由于程序中没有dataChanged
信号,因此某些方法可能会尝试间接执行此操作。此外,由于它在您关闭程序时发生,我首先会看到解释器关闭时执行的代码(即析构函数等)。