(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 );//表格最后不留空白