赞
踩
使用QTextCursor添加表格列表和图片。
构造函数:
常用的函数:
setAlignment() | 设置对齐方式 |
setCellSpacing() | 设置单元格之间的间距 |
setCellPadding(0 | 设置单元格填充 |
setBackground() | 设置背景颜色 |
setBorderCollapse() | 设置边框折叠 |
setColumns() | 设置列数 |
setColumnWidthConstraint() | 设置列宽约束 |
isValid() | 列表格式是否合规 |
添加表格使用:cursor.insertTable(x,y,tebleFormat)
- x 为行数
- y 为列数
- tableFromat 为表的格式
例子:在textEdit中添加一个表格
- //添加一个表格
- QTextCursor cursor=document->rootFrame()->lastCursorPosition();//获取最后的位置
- QTextTableFormat table;
- table.setAlignment(Qt::AlignLeft);//左边
- table.setCellPadding(10);//设置填充
- table.setCellSpacing(1);//设置间隔
- //用一个textTable 接收插入的表格
- QTextTable *texttable=cursor.insertTable(5,5,table);//插入一个表格
设置列宽约束:需要使用容器来存放每列的约束
- //添加一个表格
- QTextCursor cursor=document->rootFrame()->lastCursorPosition();//获取最后的位置
- QTextTableFormat table;
- table.setAlignment(Qt::AlignLeft);//左边
- table.setCellPadding(10);//设置填充
- table.setCellSpacing(1);//设置间隔
- QVector<QTextLength> length;//创建一个容器存放列限制
- for(int i=0;i<5;i++)
- {
- length.append(QTextLength(QTextLength::FixedLength,50));
- }
- table.setColumnWidthConstraints(length);//设置列限制
- QTextTable *texttable=cursor.insertTable(5,5,table);//插入一个表格
setFromat() | 设置表格格式 |
rows() | 行数 |
rowStart(),rowEnd() | 开始的游标,结束的游标 |
resize() | 调整表的结构 |
removeRows(),removeColumns() | 删除行数,列数 |
mergeCells() | 合并单元表格 |
insertRows(),insertColumns() | 插入行数和列数 |
appendRows(),appendColumns() | 追加行、列 |
splitCell() | 拆分单元格 |
cellAt() | 返回指定位置的单元格 |
mergeCells(row,column,numRows,numColumns )行和列都从0开始
- row 起始行
- column 起始列
- numRows 需要合并的行数
- numColumns 需要合并的列数
例子1:从0,0开始,合并2行4列
texttable->mergeCells(0,0,2,4);//0,0开始合并两行四列
例子2:从1,1开始,合并2行3列
texttable->mergeCells(1,1,2,3);//1,1开始合并2行3列
splitCell(row,column,numRows,numColumns)
- row 起始行
- column 起始列
- numRows 需要分割成的行数
- numColumns 需要分割成的列数
原始表格为:
合并成3列
- texttable->mergeCells(0,0,2,4);
- texttable->splitCell(0,0,1,3);//0,0开始分割1行,分割成3列
还原成原来的完整表格:
- texttable->mergeCells(0,0,2,4);
- texttable->splitCell(0,0,1,1);//分割成 1行 1列
表格单元格是属于表格的文档结构片段。该表将单元格排序为特定的行和列;单元格还可以跨越多列和多行。单元格通常在使用QTextCursor::insertTable() 插入文档时创建,但也会在调整表格大小时创建和销毁。
构造函数:
常用的函数:
fristCursorPosition() | 第一个有效的光标位置 |
lastCursorPosition() | 最后一个有效的光标位置 |
row() | 行号 |
column() | 列号 |
文档中表格单元格的表格单元格格式指定表格单元格的可视属性
这些样式都大致相同就不列举了
QTextTableCellFormat Class |Qt GUI 5.15.11
widget.h文件添加以下数据
头文件:
- #include<QTextEdit>
- #include<QTextTable>
- #include<QTextCursor>
- #include<QTextDocument>
- #include<QTextTableCell>
- #include<QDebug>
成员函数和成员变量:
- QTextEdit *textedit;//文本框
- int row;//行数
- int column;//列数
- void mergeCells(QTextTable*table,int a,int b,int c,int d);//合并表格
- void splitCalls(QTextTable*table,int a=0,int b=0,int c=1,int d=1);//分割表格
- void setTextLength(QTextTable *table,QTextTableFormat &p);//添加列限制
- void setTableCellformat(QTextTable *table);//添加表格块格式和数据
- void showtext(QTextTable *table);//输出全部内容
构造函数的内容:
- resize(800,800);
- textedit=new QTextEdit(this);
- textedit->setFixedSize(500,500);//设置文本框大小
- textedit->move(100,100);//移动文本框位置
- QTextDocument *document=textedit->document();//获取文本
- document->setDefaultFont(QFont("宋体",12));//设置默认字体和字体大小
- QTextCursor cursor=textedit->textCursor();//获得文本当前光标位置
- QTextTableFormat tablefromat;
- tablefromat.setAlignment(Qt::AlignLeft);//放到最左边
- tablefromat.setCellPadding(10);//设置填充
- tablefromat.setCellSpacing(1);//设置边距
- row=5;//初始为5行
- column=5;//初始为5列
- QTextTable *table=cursor.insertTable(row,column,tablefromat);//插入一个表格,并用table接收
- //setTextLength(table,tablefromat);//添加列限制
- setTableCellformat(table);//添加格式和添加数据
- //mergeCells(table,0,0,2,4);//合并表格
- //splitCalls(table);//分割表格,有默认值,默认恢复原状
- //showtext(table);//显示表格中的全部数据
函数的实现:
- void Widget::setTextLength(QTextTable *table,QTextTableFormat &p)//添加列限制
- {
-
- QVector<QTextLength> textlength;
- for(int i=0;i<table->columns();i++)
- {
- textlength.append(QTextLength(QTextLength::PercentageLength,80));
- }
- p.setColumnWidthConstraints(textlength);
- table->setFormat(p);
- }
- void Widget::mergeCells(QTextTable* table,int a,int b,int c,int d)//合并表格
- {
- if(a<0||a>table->rows()-1)
- {
- return;
- }
- if(b<0||b>table->rows()-1)
- {
- return;
- }
- if(c<0||c>table->rows())
- {
- return;
- }
- if(d<0||d>table->rows())
- {
- return;
- }
- table->mergeCells(a,b,c,d);//合并表格
- }
- void Widget::splitCalls(QTextTable* table,int a,int b,int c,int d)//分割表格
- {
- if(a<0||a>table->rows()-1)
- {
- return;
- }
- if(b<0||b>table->columns()-1)
- {
- return;
- }
- if(c<0||c>table->rows())
- {
- return;
- }
- if(d<0||d>table->columns())
- {
- return;
- }
- table->splitCell(a,b,c,d);//分割表格
- }
- void Widget::setTableCellformat(QTextTable *table)//添加表格块格式和添加数据
- {
- QTextTableCellFormat cellFormat;//表格块格式
- cellFormat.setPadding(1);//填充
- cellFormat.setFont(QFont("楷书",10));//设置字体和大小
- cellFormat.setBackground(Qt::white);//设置背景
- for(int i=0;i<table->rows();i++)
- {
- for(int j=0;j<table->columns();j++)
- {
- QTextTableCell cell=table->cellAt(i,j);//获取位置的表格块
- cell.setFormat(cellFormat);
- QTextCursor cursor=cell.firstCursorPosition();//获取光标位置
- cursor.insertText("table");//插入数据
- }
-
- }
- }
- void Widget::showtext(QTextTable *table)//输出全部内容
- {
- for(int i=0;i<table->rows();i++)
- {
- for(int j=0;j<table->columns();j++)
- {
- QTextTableCell cell=table->cellAt(i,j);
- QTextCursor cursor=cell.firstCursorPosition();//获取光标初始位置
- QTextBlock block=cursor.block();//获取当前的文本块
- qDebug()<<block.text();//输出内容
- }
- }
- }
页面效果:
功能的话在这就不展示了,我这是可以运行的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。