执行这个简单的代码片段:
{
QModelIndexList sel = ui->tableView->selectionModel()->selectedRows(0);
sel.at(0).isValid(); // To prevent removing the previous line by optimization
}
Run Code Online (Sandbox Code Playgroud)
当所选行的数量约为一百万时,需要超过30秒.QModelIndex列表的构造几乎是立即的,但破坏需要永远.花在这个函数上的时间是:
template <typename T>
Q_INLINE_TEMPLATE void QList<T>::node_destruct(Node *from, Node *to)
{
if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic)
while(from != to) --to, delete reinterpret_cast<T*>(to->v);
else if (QTypeInfo<T>::isComplex)
while (from != to) --to, reinterpret_cast<T*>(to)->~T();
}
Run Code Online (Sandbox Code Playgroud)
有人有解决方案吗?有没有办法在没有创建的情况下获取所选行的索引QModelIndexList,或者我可以以某种方式加速破坏?
这是简单的代码:
QByteArray ba = jdoc.toBinaryData();
QJsonDocument jdoc2;
jdoc2.fromBinaryData(ba);
qDebug() << jdoc.isNull();
qDebug() << jdoc2.isNull();
Run Code Online (Sandbox Code Playgroud)
结果:jdoc不为空,而是jdoc2为空。我究竟做错了什么?看起来jdoc2.fromBinaryData(ba);根本不起作用。我使用 Qt 5.5.0