您的位置:首页 > 编程语言 > Qt开发

QTableView的一些用法

2015-09-23 15:29 302 查看
(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 );//表格最后不留空白
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: