QT 之 QListView类

来源:互联网 发布:java培训后好找工作吗 编辑:程序博客网 时间:2024/05/22 17:25
对于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); 


0 0
原创粉丝点击