0

在我的程序中,我有一个设置为显示 QStandardItemModel 的 QTableView。我想连接模型的

itemChanged(QStandardItem*)

向我的 SLOT 发出信号。我做了

connect(dynamic_cast<QStandardItemModel*>(ui->tableView->model()), SIGNAL(itemChanged(QStandardItem*)), this, SLOT(saveItem(QStandardItem*)));

但这总是无法连接(返回 false)。我猜这是因为 dynamic_cast 但我不确定。

我究竟做错了什么??

4

3 回答 3

0

即使QTableView::model()返回 a QAbstractItemModel*,如果模型在建立连接QStandardItemModel* 之前设置为 a ,实际对象仍然是 a QStandardItemModel,因此连接应该可以正常工作,而无需将指针转换为该类型。

可能的连接错误包括:空指针(在调用之前未设置模型model())、插槽/信号名称拼写错误、未将函数声明为插槽/信号。

PS:QStandardItemModel如果你还没有的话,最好在你的类中拥有一个指针成员,而不是使用model()它来检索它并且每次你需要访问QStandardItemModel类的特定功能时都必须重复强制转换。
作为一个额外的好处,自动完成将起作用,因为 QtCreator 也会知道实际的对象类型。

于 2013-08-23T14:27:06.697 回答
0

不要dynamic_castQObjects 上使用qobject_cast,作为等价物使用,它更安全(dynamic_cast库共享的类有一些问题,所以这可能是你的问题,请参阅文档)。
在连接中,您无论如何都不需要此演员表(这仅有助于自动完成),静态演员表也应该没问题。

另外当连接失败时,它会在日志中提示到底出了什么问题,所以请检查日志。

于 2013-08-22T15:23:52.003 回答
0

在将模型设置为表之后进行连接就可以完成这项工作。将模型设置为table后,返回QStandardItemModel,所以不需要强制转换。

于 2013-08-22T15:13:29.873 回答