在我的程序中,我有一个QTableView,它被设置为显示QStandardItemModel。 我想连接Model的
itemChanged(QStandardItem *)
向我的SLOT发出信号。我做了
connect(dynamic_cast<QStandardItemModel*>(ui->tableView->model()), SIGNAL(itemChanged(QStandardItem*)), this, SLOT(saveItem(QStandardItem*)));
但是这总是无法连接(返回false)。我猜这是因为dynamic_cast,但我不确定。
我做错了什么?
答案 0 :(得分:0)
将模型设置为表格后进行连接可以完成工作。将模型设置为table后,它返回QStandardItemModel,因此无需强制转换。
答案 1 :(得分:0)
不要在dynamic_cast
上使用QObject
,使用qobject_cast
作为等价物,它更安全(dynamic_cast
对库共享的类有一些问题,所以这可能是你的问题,请参阅docs)
在连接中你无论如何都不需要这个演员(这只会在自动完成时有所帮助),静态演员也应该是Ok。
此外,当连接失败时,它会在日志中提示出现了什么问题,因此请查看日志。
答案 2 :(得分:0)
即使QTableView::model()
返回QAbstractItemModel*
,如果在建立连接之前将模型设置为QStandardItemModel*
,则实际对象仍为{ {1}},因此连接应该无需将指针强制转换为该类型。
可能的连接错误包括:空指针(通过在调用QStandardItemModel
之前不设置模型),插槽/信号名称的拼写错误,而不是将函数声明为插槽/信号。
PS:如果您还没有model()
作为指针成员,可能会更好,如果您还没有,而不是使用QStandardItemModel
来检索它并且必须重复演员表每次需要访问model()
类的特定功能时。
作为额外的好处,自动完成将起作用,因为QtCreator也会知道实际的对象类型。