Qt:将广播的发送器连接到接收器
Qt: Connect casted sender to a receiver
在我的程序中,我有一个QTableView,它被设置为显示QStandardItemModel。我想连接Model的
itemChanged(QStandardItem*)
给我的SLOT发信号。我做了
connect(dynamic_cast<QStandardItemModel*>(ui->tableView->model()), SIGNAL(itemChanged(QStandardItem*)), this, SLOT(saveItem(QStandardItem*)));
但这总是无法连接(返回false)。我猜是因为dynamic_cast,但我不确定。
我做错了什么??
即使QTableView::model()
返回QAbstractItemModel*
,如果在建立连接之前将模型设置为QStandardItemModel*
,实际对象仍然是QStandardItemModel
,因此连接应该可以工作,而无需将指针强制转换为该类型。
可能的连接错误包括:空指针(在调用model()
之前未设置模型)、插槽/信号名称拼写错误、未将函数声明为插槽/信号。
PS:如果您的类中还没有QStandardItemModel
,那么最好将其作为指针成员,而不是使用model()
来检索它,并且每次需要访问QStandardItemModel
类的特定函数时都必须重复强制转换。
另外一个好处是,自动完成可以工作,因为QtCreator也知道实际的对象类型。
将模型设置为表后进行连接即可完成此任务。将模型设置为表后,它将返回QStandardItemModel,因此不需要强制转换。
不要在QObject
s上使用dynamic_cast
,使用等效的qobject_cast
,这样更安全(dynamic_cast
在库共享类方面存在一些问题,因此这可能是您的问题,请参阅文档)
在connect中,您无论如何都不需要此强制转换(这只会在自动完成时有所帮助),静态强制转换也应该可以。
此外,当连接失败时,它会在日志中提示到底出了什么问题,所以请检查日志。
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- Qt 错误:信号 QDeclarativeEngine::quit() 发出,但没有连接接收器来处理它
- Qt:将广播的发送器连接到接收器
- 是否可以在没有接收器实例的情况下将信号连接到静态插槽
- Boost套接字/接收器无法在同一端口上侦听/连接
- GmfBridge 不将接收器筛选器与源筛选器连接
- Boost asio接收器在没有新连接的情况下解锁