对于QListView的使用总结了以下几个方面:
1.界面内容实时刷新时,需要如下设置:
lstview->setUpdatesEnabled(false);
。。。 lstview->setUpdatesEnabled(true);
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; 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); } } } 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); } 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); |
|