标签:qlistwidget insertitem 顺序 parent insert
在使用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())问题解决!
标签:qlistwidget insertitem 顺序 parent insert
原文地址:http://blog.csdn.net/slug302/article/details/39719039