当前位置:   article > 正文

Qt项目——文本编辑器(功能模块③)

Qt项目——文本编辑器(功能模块③)

项目地址:GitHub - Outlier9/CatEditor: Cat文本编辑器--Qt

有帮助的话各位点点 star 啦,感谢!

如果有需要学习该项目的人,觉得看文档较为困难,可以加我联系方式,给github点个star后可免费提供学习视频!!!

(7)文档内容操作

文档内容的剪切、复制、粘贴,撤销(上一步)、重写(下一步)等操作,同上,在.ui界面对这些Action转到槽,选triggered信号,关于这几种功能,在Qt中有已实现的函数,直接调用即可

  1. void MainWindow::on_undoAction_triggered()
  2. {
  3. docUndo();
  4. }
  5. void MainWindow::on_redoAction_triggered()
  6. {
  7. docRedo();
  8. }
  9. void MainWindow::on_cutAction_triggered()
  10. {
  11. docCut();
  12. }
  13. void MainWindow::on_copyAction_triggered()
  14. {
  15. docCopy();
  16. }
  17. void MainWindow::on_pasteAction_triggered()
  18. {
  19. docPaste();
  20. }
  21. //撤销(上一步)
  22. void MainWindow::docUndo()
  23. {
  24. if(activateChildWnd())
  25. activateChildWnd()->undo();
  26. }
  27. //重写(下一步)
  28. void MainWindow::docRedo()
  29. {
  30. if(activateChildWnd())
  31. activateChildWnd()->redo();
  32. }
  33. //剪切
  34. void MainWindow::docCut()
  35. {
  36. if(activateChildWnd())
  37. activateChildWnd()->cut();
  38. }
  39. //复制
  40. void MainWindow::docCopy()
  41. {
  42. if(activateChildWnd())
  43. activateChildWnd()->copy();
  44. }
  45. //粘贴
  46. void MainWindow::docPaste()
  47. {
  48. if(activateChildWnd())
  49. activateChildWnd()->paste();
  50. }

(8)字体格式

文字的加粗、倾斜、下划线操作,同上,在.ui界面对这些Action转到槽,选triggered信号,关于这几种功能,是需要对选中的文字进行设置

void setFormatOnSelectedWord(const QTextCharFormat &fmt);//对选中的字体格式进行设置
  1. void ChileWnd::setFormatOnSelectedWord(const QTextCharFormat &fmt)
  2. {
  3. //获取文档光标
  4. QTextCursor tcursor = textCursor();
  5. if(!tcursor.hasSelection())
  6. tcursor.select(QTextCursor::WordUnderCursor);//选中模式
  7. tcursor.mergeCharFormat(fmt);
  8. //合并格式
  9. mergeCurrentCharFormat(fmt);
  10. }
  1. //转到槽
  2. void on_blodAction_triggered();
  3. void on_inclineAction_triggered();
  4. void on_underlineAction_triggered();
  1. void MainWindow::on_blodAction_triggered()
  2. {
  3. textBold();
  4. }
  5. void MainWindow::on_inclineAction_triggered()
  6. {
  7. textItalic();
  8. }
  9. void MainWindow::on_underlineAction_triggered()
  10. {
  11. textUnderline();
  12. }
  13. //加粗
  14. void MainWindow::textBold()
  15. {
  16. QTextCharFormat fmt;
  17. fmt.setFontWeight(ui->blodAction->isChecked() ? QFont::Bold : QFont::Normal);
  18. if(activateChildWnd())
  19. activateChildWnd()->setFormatOnSelectedWord(fmt);
  20. }
  21. //倾斜
  22. void MainWindow::textItalic()
  23. {
  24. QTextCharFormat fmt;
  25. fmt.setFontItalic(ui->inclineAction->isChecked());
  26. if(activateChildWnd())
  27. activateChildWnd()->setFormatOnSelectedWord(fmt);
  28. }
  29. //下划线
  30. void MainWindow::textUnderline()
  31. {
  32. QTextCharFormat fmt;
  33. fmt.setFontUnderline(ui->underlineAction->isChecked());
  34. if(activateChildWnd())
  35. activateChildWnd()->setFormatOnSelectedWord(fmt);
  36. }

在该功能实现中,对字体的设置是对选中的字体进行设置,所以代码在isChecked这一步,需要确保该Action是可勾选的,也就是Checkable

(9)字号字体

文字设置字体和字号操作,在.ui界面对这些控件转到槽,选activated(QString)信号,关于这几种功能,是需要对选中的文字进行设置

  1. void textFamily(const QString &fmly); //设置字体
  2. void textSize(const QString &ps); //设置字号
  1. void MainWindow::on_fontComboBox_activated(const QString &arg1)
  2. {
  3. textFamily(arg1);
  4. }
  5. void MainWindow::on_sizeComboBox_activated(const QString &arg1)
  6. {
  7. textSize(arg1);
  8. }
  9. //设置字体
  10. void MainWindow::textFamily(const QString &fmly)
  11. {
  12. QTextCharFormat fmt;
  13. fmt.setFontFamily(fmly);
  14. if(activateChildWnd())
  15. activateChildWnd()->setFormatOnSelectedWord(fmt);
  16. }
  17. //设置字号
  18. void MainWindow::textSize(const QString &ps)
  19. {
  20. qreal pointSize = ps.toFloat();
  21. if(ps.toFloat() > 0)
  22. {
  23. QTextCharFormat fmt;
  24. fmt.setFontPointSize(pointSize);
  25. if(activateChildWnd())
  26. activateChildWnd()->setFormatOnSelectedWord(fmt);
  27. }
  28. }

 (10)段落对齐

对齐方式有左端对齐、居中对齐、右端对齐、两端对齐,同时只能存在一种,所以这四种互斥,需要在初始化中设置互斥性

  1. //对齐方式互斥性,一次只能选一种
  2. QActionGroup *alignGroup = new QActionGroup(this);
  3. alignGroup->addAction(ui->leftAction);
  4. alignGroup->addAction(ui->rightAction);
  5. alignGroup->addAction(ui->centerAction);
  6. alignGroup->addAction(ui->justifyAction);

然后完成段落对齐的逻辑

void setAlignOfDocumentText(int aligntype); //设置段落对齐方式
  1. //设置段落对齐方式
  2. void ChileWnd::setAlignOfDocumentText(int aligntype)
  3. {
  4. //给传入的参数设置编号,1-->左端对齐,2-->右端对齐,3-->居中对齐,4-->两端对齐
  5. if(aligntype == 1)
  6. {
  7. setAlignment(Qt::AlignLeft | Qt::AlignAbsolute);
  8. }
  9. else if(aligntype == 2)
  10. {
  11. setAlignment(Qt::AlignRight | Qt::AlignAbsolute);
  12. }
  13. else if(aligntype == 3)
  14. {
  15. setAlignment(Qt::AlignCenter);
  16. }
  17. else if(aligntype == 4)
  18. {
  19. setAlignment(Qt::AlignJustify);
  20. }
  21. }
  1. void on_leftAction_triggered();
  2. void on_rightAction_triggered();
  3. void on_centerAction_triggered();
  4. void on_justifyAction_triggered();
  1. void MainWindow::on_leftAction_triggered()
  2. {
  3. if(activateChildWnd())
  4. activateChildWnd()->setAlignOfDocumentText(1);
  5. }
  6. void MainWindow::on_rightAction_triggered()
  7. {
  8. if(activateChildWnd())
  9. activateChildWnd()->setAlignOfDocumentText(2);
  10. }
  11. void MainWindow::on_centerAction_triggered()
  12. {
  13. if(activateChildWnd())
  14. activateChildWnd()->setAlignOfDocumentText(3);
  15. }
  16. void MainWindow::on_justifyAction_triggered()
  17. {
  18. if(activateChildWnd())
  19. activateChildWnd()->setAlignOfDocumentText(4);
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/919508
推荐阅读
相关标签
  

闽ICP备14008679号