使用QTextCursor添加表格列表和图片。
QTextTableFromat (表格格式)
构造函数:
常用的函数:
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);//插入一个表格
QTextTable(文本表格)
常用的函数:
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列
QTextTableCell(表格单元格)
表格单元格是属于表格的文档结构片段。该表将单元格排序为特定的行和列;单元格还可以跨越多列和多行。单元格通常在使用QTextCursor::insertTable() 插入文档时创建,但也会在调整表格大小时创建和销毁。
构造函数:
常用的函数:
fristCursorPosition() | 第一个有效的光标位置 |
lastCursorPosition() | 最后一个有效的光标位置 |
row() | 行号 |
column() | 列号 |
QTextTableCellFromat(表格单元格样式)
文档中表格单元格的表格单元格格式指定表格单元格的可视属性
这些样式都大致相同就不列举了
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();//输出内容
}
}
}
页面效果:
功能的话在这就不展示了,我这是可以运行的。