Qt富文本编辑器中表格的操作

这篇具有很好参考价值的文章主要介绍了Qt富文本编辑器中表格的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

原本计划中的方案时使用Qt的富文本编辑器做一个类Word的编辑器,配合OpenXML实现脱离office软件下对Word软件进行编辑的,但是该方案最终被放弃了,所以最终放到博客上做个记录。程序是在别人的开源代码上改的,原本的文字和图片的样式编辑已经有了,表格方面是我自己做的。

效果展示

程序

插入表格

这一部分还没有将上一篇博客中的辅助设置表格行列单元格数量的功能添加进来。

    QTextCursor cursor = ui->textEdit->textCursor();
       int row = 4;
       int col = 3;

       //通过光标插入表格
       QTextTable *table =  cursor.insertTable(row,col);
       //获取表格的格式
       QTextTableFormat tableFormat = table->format();
       //表格格式设置宽度
       tableFormat.setWidth(QTextLength(QTextLength::FixedLength,ui->textEdit->width()-60));
       //表格格式设置启用BorderCollapse
       //tableFormat.setBorderCollapse(true);

       //设置表格的columnWidthConstraints约束
       QVector<QTextLength> colLength = tableFormat.columnWidthConstraints();
       for (int i = 0; i < col; ++i) {
           colLength.append(QTextLength(QTextLength::FixedLength,tableFormat.width().rawValue()/col));
       }
       colLength.clear();
       colLength.append(QTextLength(QTextLength::FixedLength,tableFormat.width().rawValue()/col-200));
       colLength.append(QTextLength(QTextLength::FixedLength,tableFormat.width().rawValue()/col+200));
       colLength.append(QTextLength(QTextLength::FixedLength,tableFormat.width().rawValue()/col));
       //QTextLength(QTextLength::FixedLength,tableFormat.width().rawValue()/col);

       tableFormat.setColumnWidthConstraints(colLength);
       tableFormat.setBorder(1);
       tableFormat.setBorderBrush(Qt::black);
       tableFormat.setAlignment(Qt::AlignCenter);
       //定义单元格格式
       QTextTableCellFormat cellFormat;
       cellFormat.setBackground(QColor("moccasin"));
       cellFormat.setVerticalAlignment( QTextCharFormat::AlignMiddle);
       QFont font("宋体");
       font.setPointSize(12);
       cellFormat.setFont(font);

       for (int i = 0; i < row; ++i) {
           for (int j = 0; j < col; ++j) {
               QTextTableCell cell = table->cellAt(i,j);
               if(i == 0)
               {
                   cell.setFormat(cellFormat);
               }
               QString str = QString::number(i * col + j + 1);
               QTextCursor cellCursor = cell.firstCursorPosition();
               QTextBlockFormat cellBlockFormat = cellCursor.blockFormat();
               cellBlockFormat.setProperty(QTextFormat::BlockAlignment,Qt::AlignCenter);
               cellCursor.setBlockFormat(cellBlockFormat);
               cellCursor.insertText(str);
           }
       }
       table->setFormat(tableFormat);

文字及表格居左

单元格还是文字根据鼠标的选中情况

void TextEditor::on_action_Left_triggered()
{//左对齐

    QTextCursor cursor =ui->textEdit->textCursor();

    QTextTable* table = cursor.currentTable();
    if(table!=nullptr)
    {
    auto tableFormat =table->format();
    auto param = cursor.selectedText();
    if(param=="")
    {
    tableFormat.setAlignment(Qt::AlignLeft);
    table->setFormat(tableFormat);
    }
    else {
        ui->textEdit->setAlignment( Qt::AlignLeft );
    }

    }
    else {
        ui->textEdit->setAlignment( Qt::AlignLeft );
    }
    if(ui->action_Left->isChecked())//设置成单选
    {
            ui->action_Right->setChecked(false);
            ui->action_Center->setChecked(false);
    }
     else ui->action_Left->setChecked(true);
}

文字及表格居中

void TextEditor::on_action_Center_triggered()
{//居中

QTextCursor cursor =ui->textEdit->textCursor();

QTextTable* table = cursor.currentTable();

if(table!=nullptr)
{
int row = table->cellAt(cursor).row();
int column = table->cellAt(cursor).column();
qDebug()<<row<<column;
auto tableFormat =table->format();
auto param = cursor.selectedText();
if(param=="")
{
    tableFormat.setAlignment(Qt::AlignCenter);
    table->setFormat(tableFormat);
}
else
{
    ui->textEdit->setAlignment( Qt::AlignCenter );
}
}
else
{
    ui->textEdit->setAlignment( Qt::AlignCenter );
}

if(ui->action_Center->isChecked())//设置成单选
{
        ui->action_Just->setChecked(false);
        ui->action_Right->setChecked(false);
        ui->action_Left->setChecked(false);
}
else ui->action_Center->setChecked(true);

}

文字及表格居右

void TextEditor::on_action_Right_triggered()
{//右对齐

QTextCursor cursor =ui->textEdit->textCursor();

QTextTable* table = cursor.currentTable();
if(table!=nullptr)
{
auto tableFormat =table->format();
auto param = cursor.selectedText();
if(param=="")
{
tableFormat.setAlignment(Qt::AlignRight);
table->setFormat(tableFormat);
}
else
{
    ui->textEdit->setAlignment( Qt::AlignRight );
}

}
else
{
    ui->textEdit->setAlignment( Qt::AlignRight );
}
if(ui->action_Right->isChecked())//设置成单选
{
        ui->action_Left->setChecked(false);
        ui->action_Center->setChecked(false);
        ui->action_Just->setChecked(false);
}
else ui->action_Right->setChecked(true);

}

单元格合并

void TextEditor::on_action_mergeTableCell_triggered()       //将选中的单元格进行合并
{
    QTextCursor cursor =ui->textEdit->textCursor();
    if ( !cursor.hasSelection() )

           cursor.select( QTextCursor::WordUnderCursor );


    QTextTable* table = cursor.currentTable();
    if(table!=nullptr)
    {
     int firstRow,numRow,firstColumn,numColumn;
     cursor.selectedTableCells(&firstRow,&numRow,&firstColumn,&numColumn);
     table->mergeCells(firstRow,firstColumn,numRow,numColumn);
    }
}

单元格拆分

void TextEditor::on_action_splitTableCell_triggered()     //用于拆分合并后的单元格
{
    QTextCursor cursor =ui->textEdit->textCursor();
    if ( !cursor.hasSelection() )
    {
        cursor.select( QTextCursor::WordUnderCursor );
    }

    QTextTable* table = cursor.currentTable();
    if(table!=nullptr)
    {
    int row = table->cellAt(cursor).row();
    int column = table->cellAt(cursor).column();
    table->splitCell(row,column,1,1);

    }
}

最后

还有部分的单元格宽度调整背景颜色等功能还没有调试完成,将会在之后的博客中更新。文章来源地址https://www.toymoban.com/news/detail-616694.html

到了这里,关于Qt富文本编辑器中表格的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue-quill-editor富文本编辑器-扩展表格、图片调整大小

    上篇文章已经讲到、vue-quill-editor的基本配置和图片转成url 这篇文章主要使用插件来完成 图片调整大小 和 表格的插件使用( 这两个目前quill 版本并不兼容 如果有大神解决了还望指点 ) 参考文章: vue-quill-editor 富文本编辑器支持图片拖拽和放大缩小_*且听风吟的博客-CSDN博

    2024年02月04日
    浏览(42)
  • qt+opencv实现图片编辑器

    借助QLabel容器,进行显示图片作为背景,然后重写QLabel类实现矩形,直线和圆形的实现。opencv板块直接实现相关图片操作。 打开图片 裁切 改变亮度和对比度 顺时针旋转和逆时针旋转 重写的QLabel

    2024年02月16日
    浏览(32)
  • 【SpringBoot篇】添加富文本编辑器操作

    富文本编辑器是一种能够编辑和展示富文本内容的工具或程序。与纯文本编辑器不同,富文本编辑器可以处理文本的格式、样式、布局等方面,使文本更加丰富多样。 富文本编辑器通常提供以下功能: 文字样式: 可以设置字体、字号、颜色、粗体、斜体、下划线等文字样式。

    2024年01月17日
    浏览(25)
  • 文本编辑器Vim常用操作和技巧

    Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。 Vim 没有菜单,只有命令。 y 复制选中内容 与 1 中部分内容重合,作为补充。 vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」

    2024年02月10日
    浏览(31)
  • 【uniapp】【微信小程序】富文本编辑器Editor之setContents初始化富文本内容失败(报错)

    进入页面初始化时,需要填入之前预填写的富文本内容,使用uniapp中editor组件setContents方法为富文本编辑器设置内容时,内容有时不时设置不成功,微信小程序同样适用 使用uniapp中editor组件setContents方法为富文本编辑器设置内容时,在mounted时调用setContents方法,富文本内容有

    2024年02月12日
    浏览(39)
  • 界面控件DevExpress WinForms/WPF v23.2 - 富文本编辑器支持内容控件

    众所周知内容控件是交互式UI元素(文本字段、下拉列表、日期选择器),用于在屏幕上输入和管理信息。内容控件通常在模板/表单中使用,以标准化文档格式和简化数据输入。DevExpress文字处理产品库(Word Processing Document API、WinForm和WPF富文本编辑器)附带了内容控制支持(v23

    2024年04月15日
    浏览(36)
  • Monaco Editor教程(二十):在编辑器的某个特定位置插入自定义的dom内容,图片,表单,表格,视频

    哇咔咔,这是我的第20篇Monaco教程,写完这一篇会暂时休息一段时间,练练字,存存稿,读读书,顺便修修文章。 目前全网成系统的monaco中文专栏应该只有我这一个,欢迎评论区打脸。自结束了GitLab CI/CD的专栏后,我就一直在利用业余时间学习Monaco相关的知识,一是为了弥补

    2023年04月16日
    浏览(40)
  • 基于QT4的GPX文件编辑器开发

    GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。 在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。

    2024年02月12日
    浏览(32)
  • Linux :: vim 编辑器:详解:光标移动定位内容,行间:快速定位至文本:开头 / 结尾;行内:词间跳跃

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 前言:已讲述了 vim 的基本操作,本文不再赘述直接上手操作! Linux :: 【简单开发篇 :: vim 编辑器:

    2024年02月07日
    浏览(41)
  • web架构师编辑器内容-快捷键操作的实现

    元素选择 前提都是在元素被选中的情况下 拷贝图层 - ⌘C / Ctrl+C : 新建当前选择的元素的一个数据结构 粘贴图层 - ⌘V / Ctrl+V : 将新建的元素添加到 components 数组中 删除图层 - Backspace / Delete : 在 components 数组中删除选择的元素 取消选中 - ESC : currentElement 设置为空 元素移

    2024年01月23日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包