Qt基础-QTableView、QTableWidget用法

QTableView与QTableWidget的区别

  • QTableView可以使用setModel设置模型,QTableWidget不可以;

关于QTableView与QStandardItemModel的tips

  • 与整体显示相关的,用QTableView设置,如设置编辑模式
  • 与某一项数据相关的,用QStandardItemModel设置,如设置某一项的底色

功能

QTableView的对象为ui.tableView,QStandardItemModel的对象为m_itemModel;

  • 设置数据模型
QStandardItemModel m_itemModel= new QStandardItemModel();
ui.tableView->setModel(m_itemModel);


与数据相关的操作

  • 添加一行数据
QList<QStandardItem *> itemList;
itemList.append(new QStandardItem("-1"));
itemList.append(new QStandardItem("-1"));
itemList.append(new QStandardItem("-1"));
itemList.append(new QStandardItem("-1"));
m_itemModel->appendRow(itemList);

  • 删除一行数据
m_itemModel->removeRow(1);

  • 设置某一项数据
m_itemModel->setData(m_itemModel->index(0, 2), "RGB");

  • 选择某一行
ui.tableView->selectRow(0);

  • 设置编辑模式
ui.tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);		//不可编辑

  • 清空数据
m_itemModel->clear();		//注意:清空后再添加数据,列宽会恢复到初始状态


与外观显示相关的操作

表格数据

  • 设置列宽度
ui.tableView->setColumnWidth(0, 100);		//设置第1列宽度为100
  • 最后一列填充空白
ui.tableWidget->horizontalHeader()->setStretchLastSection(true);	

  • 选中数据时选择整行
ui.tableView->setSelectionBehavior(QAbstractItemView::SelectRows);	//选择行

  • 一次只能选择一行
ui.tableView->setSelectionMode(QAbstractItemView::SingleSelection);	//一次只能选择一行

  • 设置焦点显示模式
ui.tableView->setFocusPolicy(Qt::NoFocus);	//设置无焦点,鼠标选中不会显示虚线框

  • 设置选中项的背景颜色
ui.tableView->setStyleSheet("selection-background-color:rgb(100,200,200)");
  • 设置表格线
ui.tableView->setShowGrid(false);			//不显示网格线


滚动条

  • 设置滚动条(不)显示
//设置不显示竖直滚动条
ui.tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

  • 判断竖直滚动条是否出现,并获取滚动条宽度
#include <QScrollBar>		//注意要添加头文件

if (ui.tableView->verticalScrollBar()->isVisible())
{
	nVerBarWidth = ui.tableView->verticalScrollBar()->width();
}

  • 滚动到底部
ui.tableView->scrollToBottom();


表头

  • 隐藏表头
ui.tableView->verticalHeader()->hide();

  • 设置表头标签
m_itemModel->setHorizontalHeaderLabels(QStringList() << "名称" << "参数1" << "参数2" << "参数3");

  • 获取列表头宽度
ui.tableView->verticalHeader()->width();

  • 设置表头的调节方式(可设置在表格视野内填充显示各列,无需设置各列的宽度)
ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//表头自动填充空白
模式描述
QHeaderView::Interactive可交互调整
QHeaderView::Fixed固定不可调节
QHeaderView::Stretch自动填充空白,不可手动调节
QHeaderView::ResizeToContents根据内容调整,不可手动调节(如果列宽固定,则超出的内容会换行显示)


信号

  • 点击表格的某项
void on_tableView_clicked(QModelIndex index)
{
	int row = index.row();
	int col = index.column();
}
  • 数据项被编辑
connect(m_itemModel,SIGNAL(itemChanged(QStandardItem *)),this,SLOT(sls_itemChanged(QStandardItem *)));

void sls_itemChanged(QStandardItem *item)
{
	int row = item->row();

	QString text=item->text();
}
  • 鼠标进入数据项
public slots:
	void on_tableWidget_entered(QModelIndex);

//注意:要实现鼠标滑过时进入,需开启鼠标跟踪
ui.tableWidget->setMouseTracking(true);


向单元格添加控件

QStandardItemModel *model=new QStandardItemModel(2,8,this);
QTableView *tableView=new QTableView(this);
tableView->setModel(model);
 
//重点
int row=0;
int column=0;
QWidget *widget=new QWidget(this)
tableView->setIndexWidget(model->index(row,column),widget);

row = 1;
col = 1;

//以下代码是向单元格中添加一张居中的图片
QLabel label;
QPixmap pixmap("eye.png");
pixmap = pixmap.scaled(15, 15, Qt::KeepAspectRatio, Qt::SmoothTransformation);  // 按比例缩放
label.setPixmap(pixmap);
label.setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);

ui->tableView->setIndexWidget(model->index(1, 1), &label);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值