QTableView的一些用法

(1)QTableView要获得其中的一项的内容,用如下代码:

QModelIndex pModelIndex = m_pUI->tableView_users->model()->index(i,0);
QString strName = pItemModel->data(pModelIndex).toString();

(2)要使表格可以按住ctrl键和shift多选  不按住任何键的时候又是单选,可以用下面代码设置表格:

m_pUI->tableView_users->setSelectionMode(QAbstractItemView::ExtendedSelection);

(3)某个项的内容被改变时要响应这一事件进行一些操作,因为项的内容被改变时,会发送itemChanged(QStandardItem *)信号,所以,需要与自己定义的槽函数进行关联:

connect(m_pUserTableModel,SIGNAL(itemChanged(QStandardItem *)),this,SLOT(slotOnTableItemChanged(QStandardItem *)) );

在slotOnTableItemChanged(QStandardItem * item)中进行想要的操作,参数item就是该操作项,用item->column()就可以获得其所在的列。

例如如下代码:

void CUerManagerDlg::slotOnTableItemChanged(QStandardItem * item)
{
 m_bIsAlreadySaved = false;
 static int i=0;
 QString strtext = item->text();
 int  col = item->column();
 if (0 == item->column())
 {
  return;
 }
 std::string strpassword = ::getMD5(strtext.toStdString());
 //断开信号槽连接 防止在调用item->setText()时,再次发送itemChanged信号,反复调用此槽函数(改变项的内容,就会发送itemChanged信号)
 disconnect(m_pUserTableModel,SIGNAL(itemChanged(QStandardItem *)),this,SLOT(slotOnTableItemChanged(QStandardItem *)) );
 item->setText(QString::fromStdString(strpassword));
}

(4)QTableView仅是MVD模式中的view,必须建一个数据模型与之绑定:


 m_pUserTableModel= new QStandardItemModel(0,T_ALL_COLUMN_COUNT_);
 m_pUserTableModel->setColumnCount(T_ALL_COLUMN_COUNT_);
 m_pUserTableModel->setHorizontalHeaderItem(T_COLUMN_NAME_,new QStandardItem( tr("用户名") ));
 m_pUserTableModel->setHorizontalHeaderItem(T_COLUMN_PASSWORD_,new QStandardItem( tr("密码") )); 

QString skinfilename=::GetConfPath()+ "userList.ini";
 QSettings * pSetting = new QSettings(skinfilename,QSettings::IniFormat);
 pSetting->setIniCodec(QTextCodec::codecForName("UTF-8"));
 QStringList strUserList =pSetting->value("username").toStringList();
 QStringList strPswdList= pSetting->value("password").toStringList();//注意这种读取ini文件的方式,ini文件结构是username=hu,liu,li,zhang,yang,zhou
 int iUserNum = strUserList.size();
 int iPswdNum = strPswdList.size();
 assert(iUserNum == iPswdNum);
 for (int i= 0;i<iUserNum;i++)
 {
  QStandardItem* item = new QStandardItem();
  item->setTextAlignment(Qt::AlignCenter);
  item->setText(strUserList[i]);
  m_pUserTableModel->setItem(i,T_COLUMN_NAME_,item);

  item = new QStandardItem();
  item->setTextAlignment(Qt::AlignCenter);
  item->setText(strPswdList[i]);

  m_pUserTableModel->setItem(i,T_COLUMN_PASSWORD_,item);
 }
 m_pUI->tableView_users->setModel( m_pUserTableModel );//关联模型和视图

 //m_pUI->tableView_users->horizontalHeader()->setSectionHidden(T_COLUMN_NAME_ , true );
 m_pUI->tableView_users->horizontalHeader()->setResizeMode(T_COLUMN_NAME_,QHeaderView::ResizeToContents  );
 m_pUI->tableView_users->horizontalHeader()->setResizeMode(T_COLUMN_PASSWORD_,QHeaderView::Stretch  );//表格最后不留空白


你可能感兴趣的:(QTableView的一些用法)