• 富文本编辑器(添加表格)


    使用QTextCursor添加表格列表和图片。

    QTextTableFromat (表格格式)

    构造函数:

     常用的函数:

    setAlignment()设置对齐方式
    setCellSpacing()设置单元格之间的间距
    setCellPadding(0设置单元格填充
    setBackground()设置背景颜色
    setBorderCollapse()设置边框折叠
    setColumns()设置列数

    setColumnWidthConstraint()

    设置列宽约束
    isValid()列表格式是否合规

    添加表格使用:cursor.insertTable(x,y,tebleFormat) 

    • x 为行数
    • y 为列数
    • tableFromat 为表的格式

    例子:在textEdit中添加一个表格

    1. //添加一个表格
    2. QTextCursor cursor=document->rootFrame()->lastCursorPosition();//获取最后的位置
    3. QTextTableFormat table;
    4. table.setAlignment(Qt::AlignLeft);//左边
    5. table.setCellPadding(10);//设置填充
    6. table.setCellSpacing(1);//设置间隔
    7. //用一个textTable 接收插入的表格
    8. QTextTable *texttable=cursor.insertTable(5,5,table);//插入一个表格

     设置列宽约束:

     设置列宽约束:需要使用容器来存放每列的约束

    1. //添加一个表格
    2. QTextCursor cursor=document->rootFrame()->lastCursorPosition();//获取最后的位置
    3. QTextTableFormat table;
    4. table.setAlignment(Qt::AlignLeft);//左边
    5. table.setCellPadding(10);//设置填充
    6. table.setCellSpacing(1);//设置间隔
    7. QVector<QTextLength> length;//创建一个容器存放列限制
    8. for(int i=0;i<5;i++)
    9. {
    10. length.append(QTextLength(QTextLength::FixedLength,50));
    11. }
    12. table.setColumnWidthConstraints(length);//设置列限制
    13. 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);//00开始合并两行四列

    例子2:从1,1开始,合并2行3列

        texttable->mergeCells(1,1,2,3);//11开始合并23

     分割表格:

    splitCell(row,column,numRows,numColumns)

    • row        起始行
    • column  起始列
    • numRows  需要分割成的行数
    • numColumns 需要分割成的列数

    原始表格为:

    合并成3列

    1. texttable->mergeCells(0,0,2,4);
    2. texttable->splitCell(0,0,1,3);//00开始分割1行,分割成3

     还原成原来的完整表格:

    1. texttable->mergeCells(0,0,2,4);
    2. texttable->splitCell(0,0,1,1);//分割成 11

     QTextTableCell(表格单元格)

    表格单元格是属于表格的文档结构片段。该表将单元格排序为特定的行和列;单元格还可以跨越多列和多行。单元格通常在使用QTextCursor::insertTable() 插入文档时创建,但也会在调整表格大小时创建和销毁。

    构造函数:

    常用的函数:

    fristCursorPosition()第一个有效的光标位置
    lastCursorPosition()最后一个有效的光标位置
    row()行号
    column()列号

    QTextTableCellFromat(表格单元格样式)

    文档中表格单元格的表格单元格格式指定表格单元格的可视属性

    这些样式都大致相同就不列举了

    QTextTableCellFormat Class |Qt GUI 5.15.11

    来个例子:

    widget.h文件添加以下数据

    头文件:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include

    成员函数和成员变量:

    1. QTextEdit *textedit;//文本框
    2. int row;//行数
    3. int column;//列数
    4. void mergeCells(QTextTable*table,int a,int b,int c,int d);//合并表格
    5. void splitCalls(QTextTable*table,int a=0,int b=0,int c=1,int d=1);//分割表格
    6. void setTextLength(QTextTable *table,QTextTableFormat &p);//添加列限制
    7. void setTableCellformat(QTextTable *table);//添加表格块格式和数据
    8. void showtext(QTextTable *table);//输出全部内容

    构造函数的内容:

    1. resize(800,800);
    2. textedit=new QTextEdit(this);
    3. textedit->setFixedSize(500,500);//设置文本框大小
    4. textedit->move(100,100);//移动文本框位置
    5. QTextDocument *document=textedit->document();//获取文本
    6. document->setDefaultFont(QFont("宋体",12));//设置默认字体和字体大小
    7. QTextCursor cursor=textedit->textCursor();//获得文本当前光标位置
    8. QTextTableFormat tablefromat;
    9. tablefromat.setAlignment(Qt::AlignLeft);//放到最左边
    10. tablefromat.setCellPadding(10);//设置填充
    11. tablefromat.setCellSpacing(1);//设置边距
    12. row=5;//初始为5
    13. column=5;//初始为5
    14. QTextTable *table=cursor.insertTable(row,column,tablefromat);//插入一个表格,并用table接收
    15. //setTextLength(table,tablefromat);//添加列限制
    16. setTableCellformat(table);//添加格式和添加数据
    17. //mergeCells(table,0,0,2,4);//合并表格
    18. //splitCalls(table);//分割表格,有默认值,默认恢复原状
    19. //showtext(table);//显示表格中的全部数据

    函数的实现:

    1. void Widget::setTextLength(QTextTable *table,QTextTableFormat &p)//添加列限制
    2. {
    3. QVector<QTextLength> textlength;
    4. for(int i=0;i<table->columns();i++)
    5. {
    6. textlength.append(QTextLength(QTextLength::PercentageLength,80));
    7. }
    8. p.setColumnWidthConstraints(textlength);
    9. table->setFormat(p);
    10. }
    11. void Widget::mergeCells(QTextTable* table,int a,int b,int c,int d)//合并表格
    12. {
    13. if(a<0||a>table->rows()-1)
    14. {
    15. return;
    16. }
    17. if(b<0||b>table->rows()-1)
    18. {
    19. return;
    20. }
    21. if(c<0||c>table->rows())
    22. {
    23. return;
    24. }
    25. if(d<0||d>table->rows())
    26. {
    27. return;
    28. }
    29. table->mergeCells(a,b,c,d);//合并表格
    30. }
    31. void Widget::splitCalls(QTextTable* table,int a,int b,int c,int d)//分割表格
    32. {
    33. if(a<0||a>table->rows()-1)
    34. {
    35. return;
    36. }
    37. if(b<0||b>table->columns()-1)
    38. {
    39. return;
    40. }
    41. if(c<0||c>table->rows())
    42. {
    43. return;
    44. }
    45. if(d<0||d>table->columns())
    46. {
    47. return;
    48. }
    49. table->splitCell(a,b,c,d);//分割表格
    50. }
    51. void Widget::setTableCellformat(QTextTable *table)//添加表格块格式和添加数据
    52. {
    53. QTextTableCellFormat cellFormat;//表格块格式
    54. cellFormat.setPadding(1);//填充
    55. cellFormat.setFont(QFont("楷书",10));//设置字体和大小
    56. cellFormat.setBackground(Qt::white);//设置背景
    57. for(int i=0;i<table->rows();i++)
    58. {
    59. for(int j=0;j<table->columns();j++)
    60. {
    61. QTextTableCell cell=table->cellAt(i,j);//获取位置的表格块
    62. cell.setFormat(cellFormat);
    63. QTextCursor cursor=cell.firstCursorPosition();//获取光标位置
    64. cursor.insertText("table");//插入数据
    65. }
    66. }
    67. }
    68. void Widget::showtext(QTextTable *table)//输出全部内容
    69. {
    70. for(int i=0;i<table->rows();i++)
    71. {
    72. for(int j=0;j<table->columns();j++)
    73. {
    74. QTextTableCell cell=table->cellAt(i,j);
    75. QTextCursor cursor=cell.firstCursorPosition();//获取光标初始位置
    76. QTextBlock block=cursor.block();//获取当前的文本块
    77. qDebug()<<block.text();//输出内容
    78. }
    79. }
    80. }

    页面效果:

     功能的话在这就不展示了,我这是可以运行的。

  • 相关阅读:
    飞阳物联平台,智能开关2.0版本支持凌动开关
    【ML04】Multiple Variable Linear Regression
    HarmonyOS鸿蒙开发常用4种布局详细说明
    2024.6.2力扣刷题记录
    Spring WebClient 基于响应式编程模型的HTTP客户端
    23种设计模式之迭代器模式(Iterator Pattern)
    Java反应式编程(3)
    CEAC 之《企业信息化管理》3
    (附源码)springboot农田灌溉设施管理系统 毕业设计 260931
    【软考 系统架构设计师】案例分析⑧ 数据库索引与视图
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127806137