QPrivateSignal (Semantic Issue: too few arguments to function call) AbstractItemModel
起因在 listview 插入行后,调用信号 rowsInserted() 信号提示缺少参数
在 AbstractItemModel.h 中 定义如下
Q_SIGNALS:
void rowsInserted(const QModelIndex &parent, int first, int last, QPrivateSignal);
关于 Qt5 中信号和槽的改进
中文:https://www.devbean.net/2012/12/how-qt-signals-and-slots-work-qt5/
英文:https://woboq.com/blog/how-qt-signals-slots-work-part2-qt5.html
有时将信号作为 private 的也是可以的。这是QAbstractItemModel中的例子:其 API 并不希望开发人员在子类中发出信号。曾经使用预处理机制来将信号作为私有的,但是这打破了新的连接语法。
我们还引入了新的技巧。在Q_OBJECT宏中申明了 private 的QPrivateSignal空结构
。它可以作为信号的最后一个参数。由于它是私有的,只有当前对象才能在调用信号时构建它。MOC 会在生成签名信息时忽略最后一个QPrivateSignal参数
。
所以,面对提示缺少参数这个问题,解决方案如下:
emit rowsInserted(QModelIndex(), column, column, {});
更好的方法是如下
beginInsertRows(QModelIndex(), index, index);
dataList[index] = value;
endInsertRows();
有其他问题可发邮件至:dfzx.123@163.com
在标题注明问题,如能解决会尽快回复
还没有评论,来说两句吧...