QTableView常用于实现数据的表格显示。下面我们如何按步骤实现学生信息表格:
一 添加表头
//准备数据模型
QStandardItemModel *student_model = new QStandardItemModel();。
student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name")));。
student_model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("NO.")));。
student_model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Sex")));。
student_model->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("Age")));。
student_model->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("College")));。
//利用setModel()方法将数据模型与QTableView绑定。
ui->student_tableview->setModel(student_model);。
二 设置表格属性
//设置列宽不可变动,即不能通过鼠标拖动增加列宽 。
ui->student_tableview->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed); 。
ui->student_tableview->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed); 。
ui->student_tableview->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed); 。
ui->student_tableview->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed); 。
ui->student_tableview->horizontalHeader()->setResizeMode(4, QHeaderView::Fixed); 。
//设置表格的各列的宽度值 。
ui->student_tableview->setColumnWidth(0,100); 。
ui->student_tableview->setColumnWidth(1,100); 。
ui->student_tableview->setColumnWidth(2,100); 。
ui->student_tableview->setColumnWidth(3,100); 。
ui->student_tableview->setColumnWidth(4,100); 。
//默认显示行头,如果你觉得不美观的话,我们可以将隐藏 。
ui->student_tableview->verticalHeader()->hide(); 。
//设置选中时为整行选中 。
ui->student_tableview->setSelectionBehavior(QAbstractItemView::SelectRows); 。
//设置表格的单元为只读属性,即不能编辑 。
ui->student_tableview->setEditTriggers(QAbstractItemView::NoEditTriggers); 。
//如果你用在QTableView中使用右键菜单,需启用该属性 。
ui->tstudent_tableview->setContextMenuPolicy(Qt::CustomContextMenu);。
三 动态添加行
在表格中添加行时,我们只需要在model中插入数据即可,一旦model中的数据发生变化,QTabelView显示就会做相应的变动。
//在第一行添加学生张三的个人信息(setItem函数的第一个参数表示行号,第二个表示列号,第三个为要显示的数据)。
student_model->setItem(0, 0, new QStandardItem(“张三"));。
student_model->setItem(0, 1, new QStandardItem("20120202"));。
student_model->setItem(0, 2, new QStandardItem("男"));。
student_model->setItem(0, 3, new QStandardItem("18"));。
student_model->setItem(0, 4, new QStandardItem("土木学院"));。
四 设置数据显示的样式
//设置单元格文本居中,张三的数据设置为居中显示。
student_model->item(0, 0)->setTextAlignment(Qt::AlignCenter);。
student_model->item(0, 1)->setTextAlignment(Qt::AlignCenter);。
student_model->item(0, 2)->setTextAlignment(Qt::AlignCenter);。
student_model->item(0, 3)->setTextAlignment(Qt::AlignCenter);。
student_model->item(0, 4)->setTextAlignment(Qt::AlignCenter);。
//设置单元格文本颜色,张三的数据设置为红色。
student_model->item(0, 0)->setForeground(QBrush(QColor(255, 0, 0))); 。
student_model->item(0, 1)->setForeground(QBrush(QColor(255, 0, 0))); 。
student_model->item(0, 2)->setForeground(QBrush(QColor(255, 0, 0))); 。
student_model->item(0, 3)->setForeground(QBrush(QColor(255, 0, 0))); 。
student_model->item(0, 4)->setForeground(QBrush(QColor(255, 0, 0)));。
//将字体加粗
student_model->item(0, 0)->setFont( QFont( "Times", 10, QFont::Black ) );。
student_model->item(0, 1)->setFont( QFont( "Times", 10, QFont::Black ) );。
student_model->item(0, 2)->setFont( QFont( "Times", 10, QFont::Black ) );。
student_model->item(0, 3)->setFont( QFont( "Times", 10, QFont::Black ) );。
student_model->item(0, 4)->setFont( QFont( "Times", 10, QFont::Black ) );。
//设置排序方式,按年龄降序显示。
student_model->sort(3, Qt::DescendingOrder);。
这个不用获取什么行号,你可以用resize重新扩大选择的区域。
比如你选定了a1:a8然后想把b1:b8一起合并,vba代码如下:
Sub test()
activesheet.Range("a1:a8").Resize(, 2).merge。
End Sub
QT的QTableView是基于Model/View架构的,这种设计并没有包含一个完整而独立的组件用于管理用户的交互。一般来说,view仅仅是用作对model数据的展示和对用户输入的处理,而不应该去做其他的工作。在这种结构中,为了获得对用户输入控制的灵活性,这种交互工作交给了delegate,也就是“委托”。
而QT对QTableView的委托QStyleItemDelegate是不支持换行功能的,即使手动加上\r\n,在Table里显示的也只是一个空格。
说到这里,相信你也该猜到了,方法是自定义委托,继承QStyleItemDelegate,在paint函数里面,drawText的时候,用QTextOption设置换行。
我用自己账号回答被判违规了,不能给你追问了不好意思。
查看QT帮助文档吧 数字序列可以隐藏的 边框颜色都是可以修改的。
请问,在QTableView中如何不显示行号和列头。
------解决方案--------------------。
QTableView::horizontalHeader()->hide()方法。
QTableView::verticalHeader()->hide()方法 。
------解决方案--------------------。
C/C++ codetableView->horizonalHeader()->setVisible(false);//这个可以。
原文地址:http://www.qianchusai.com/qtableview%E8%87%AA%E5%8A%A8%E6%98%BE%E7%A4%BA%E8%A1%8C%E5%8F%B7.html