标签: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