对于QListView的使用总结了以下几个方面:
1.界面内容实时刷新时,需要如下设置:
lstview->setUpdatesEnabled(false);
。。。
。。。
lstview->setUpdatesEnabled(true);
lstview->triggerUpdate();
lstview->triggerUpdate();
可以保证listview中更新或后面新增的内容正常显示,否则,界面可能不会实时刷新;
2.关联QListViewItem的信号槽最好用信号
currentChanged ( QListViewItem * )
此SIGNAL可保证在click点击和currentItem改变时均可激发关联的SLOT;
3.item关联的SLOT函数中, void QDlgImpl::OnListItemClicked(QListViewItem* item, const QPoint& pos, int col)
{
{
//首先要对item有效性进行判断
if(item == NULL)
return;
//其次如果要对click的item的按列进行处理,则还要所点击的viewitem列的有效性进行判断
if(col<0 || col>=listView->columns())
return;
return;
if(col == 2)
{
//此时可以弹出dialog,在QDialog::Accept==dlg.exec()时返回所要处理的某item列格的文本,然后更新到列格中item->setText(col, text);
}
else if(c==3) //color
{
QColor color = QColorDialog::getColor(pItem->GetColor(3), this, "color dialog" );
if(color.isValid())
{
pItem->SetColor(3, color);
}
}
}
{
QColor color = QColorDialog::getColor(pItem->GetColor(3), this, "color dialog" );
if(color.isValid())
{
pItem->SetColor(3, color);
}
}
}
4.在item某一列格中画出颜色框,并使之颜色可编辑,用于配置颜色选项
4.1 继承QListViewItem实现virtual void paintCell()
void CListItemImpl::paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align )
{
if(column==2 || column==3)
{
int delta = 2;
QRect rc(delta,delta,width-2*delta,height()-2*delta);
p->save();
p->setPen(Qt::black);
if(column==2) //背景色
{
p->drawRect(rc);
rc.setRect(delta+1,delta+1,width-2*(delta+1),height()-2*(delta+1));
p->fillRect(rc,QBrush(m_pBkColor));
}
else if(column==3) //前景色
{
p->drawRect(rc);
rc.setRect(delta+1,delta+1,width-2*(delta+1),height()-2*(delta+1));
p->fillRect(rc,QBrush(m_pFrColor));
}
p->restore();
}
else
QListViewItem::paintCell(p,cg,column,width,align);
}
{
if(column==2 || column==3)
{
int delta = 2;
QRect rc(delta,delta,width-2*delta,height()-2*delta);
p->save();
p->setPen(Qt::black);
if(column==2) //背景色
{
p->drawRect(rc);
rc.setRect(delta+1,delta+1,width-2*(delta+1),height()-2*(delta+1));
p->fillRect(rc,QBrush(m_pBkColor));
}
else if(column==3) //前景色
{
p->drawRect(rc);
rc.setRect(delta+1,delta+1,width-2*(delta+1),height()-2*(delta+1));
p->fillRect(rc,QBrush(m_pFrColor));
}
p->restore();
}
else
QListViewItem::paintCell(p,cg,column,width,align);
}
4.2 修改颜色的地方,直接在listview实现的代码中给m_pBkColor或m_pFrColor赋相应的QColor即可,如第3点所示的else if(c==3)实现部分。

4.3隐藏某列(如下隐藏第1列)时,需要对listview加如下设置:
pLstview->setColumnWidthMode(1,QListView::Manual);
pLstview->hideColumn(1);
pLstview->header()->setResizeEnabled(false,1);