首页 > 代码库 > QListWdiget insertItem顺序问题
QListWdiget insertItem顺序问题
在使用QListWdiget inser一个item的时候使用如下代码出现了一点小问题.
listWidget->insertItem(row, new QListWidgetItem(listWidget))
这一段代码会使得insert的item总是在listWidget的最后. 这是一个很简单很常用的api, 简单得不能再简单了, 但是却发生了意想不到的问题. 查阅文档"Inserts the item at the position in the list given by row." 毫无营养.翻阅QListWidget的源码发现了倪端, insert代码片段如下:
void QListModel::insert(int row, QListWidgetItem *item) { if (!item) return; item->view = qobject_cast<QListWidget*>(QObject::parent()); if (item->view && item->view->isSortingEnabled()) { // sorted insertion QList<QListWidgetItem*>::iterator it; it = sortedInsertionIterator(items.begin(), items.end(), item->view->sortOrder(), item); row = qMax(it - items.begin(), 0); } else { if (row < 0) row = 0; else if (row > items.count()) row = items.count(); } beginInsertRows(QModelIndex(), row, row); items.insert(row, item); item->d->theid = row; endInsertRows(); }呵呵原来问题很简单, insert的时候判断了item是否指定了parent, 如果指定了parent就会把row设置成为最大的值. 如果没有parent则按照指定的row.而我的代码中new QListWidgetItem的时候指定了parent造成了这个问题. 修改代码为
listWidget->insertItem(row, new QListWidgetItem())问题解决!
QListWdiget insertItem顺序问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。