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

QTableView基本用法讲解,Qt表格控件的使用方法

2015-10-17 16:08 866 查看
QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。但QTableView在使用麻烦的同时,也提供了更多的灵活性。

  软件环境: ubuntu

  最终效果图:

  



  一、添加表头:

QStandardItemModel *model = new QStandardItemModel();

model->setColumnCount(2);

model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("卡号"));

model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("姓名"));

复制代码

  二、设置表格属性:

ui->tableView->setModel(model);

//表头信息显示居左

ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);

//设置列宽不可变

ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);

ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);

ui->tableView->setColumnWidth(0,101);

ui->tableView->setColumnWidth(1,102);

复制代码

  注:在进行表格设置时必须是“ui->tableView->setModel(model);”在前,属性具体设置在后,

  反之则设置不会生效。如上述代码所示。

  三、添加行(添加三行一样的信息):

for(int i = 0; i < 3; i++)

{

model->setItem(i,0,new QStandardItem("2009441676"));

//设置字符颜色

model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0)));

//设置字符位置

model->item(i,0)->setTextAlignment(Qt::AlignCenter);

model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈")));

}

复制代码

  四、删除行:

//x是指定删除哪一行

model->removeRow(x);

//删除所有行

model->removeRows(0,model->rowCount());

复制代码

  再举一个例子:

  在一个药品划价模块中有这样的操作流程:

  检索处方项目成功后,把该项目显示到QTableView里,把需要编辑的数量字段提供给用户输入,用户输入确认后,该项目留在列表中,然后开始下一项目检索录入。

  实现过程如下:

  录入的项目保留在临时表tmp中,界面上的QTableView取名为tbList,与tbList关联的Model取名为tb1。检索成功后,把检索结果插入到临时表中,把需要编辑的字段提供给用户。

tb1=newQSqlTableModel(this,*dbR); //dbR是本应用中的数据源

tb1->setTable("tmp"); //处方临时表

复制代码

  程序中需要显示的时候,

tbList->setModel(NULL); //清除原先数据集

tbList->setModel(tb1); //刷新显示

复制代码

  程序中需要提供编辑输入的时候

QModelIndexmdidx=m_ui->tbList->model()->index(row,column); //获得需要编辑的单元格的位置

m_ui->tbList->setFocus(); //把输入焦点交给tbList

m_ui->tbList->setCurrentIndex(mdidx); //设定需要编辑的单元格

m_ui->tbList->edit(mdidx); //开始编辑

复制代码

  有一个问题需要注意。向QTableView中添加记录时,字段一定要完整,不能有空白字段,否则结果无法保存。切记。

  如果需要对用户输入做限制,比如只能在指定的字段输入指定的数据类型,可以通过QItemDelegate来实现。

  贴一段代码,说明QTableView基本用法

QStandardItemModel model;

//设置大小

model.setColumnCount(3); //列

model.setRowCount(musicFound); //行

//设置标题

model.setHeaderData(0,Qt::Horizontal,"ID");

//添加数据

for(int j=0;j<row;j++)

{

//写id

QStandardItem *itemID = new QStandardItem("hello");//QString::number(j)));

model.setItem(j,0,itemID);

}

//选择这个model

m_ui->tableView->setModel(&model);

//隐藏左边那列

m_ui->tableView->verticalHeader()->hide();

//列宽

m_ui->tableView->setColumnWidth(0,30);

//整行选择

m_ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

FROM: /Uploads/Images/Content/202003/13/3219dbf060d3c2c6b166ff1a28106c22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: