当前位置:   article > 正文

《五》Word文件编辑软件调试及测试

《五》Word文件编辑软件调试及测试

上一期,我们已经把大致的框架给完成了,那么今天,我们就把剩下的什么复制啊,改变字体啊什么的给做一下。

那我们就一步一步的来就可以了:

新建word:

  1. void MyWord::fileNew()
  2. {
  3. qDebug()<<"hhh";
  4. MyChild *child=createMyChild();
  5. child->NewFile();
  6. child->show();
  7. enabledText();//使得 字体设置菜单可用
  8. }

我们就是创建一个child,然后调用child.cpp中的创建就可以了,最后别忘了加上enabledText(),这样能使得字体设置菜单可用。这样我们就新建了一个word文档

下一步打开文档:

再打开之前,要先定义一个QString,来保存要打开的文件名称,如果不为空就判断是否已经打开,已经打开过的话,就设置子窗口为活动窗口,没有打开的话,就直接加载到子窗口来。

  1. void MyWord::fileOpen()
  2. {
  3. QString filename=QFileDialog::getOpenFileName(this,tr("打开"),QString(),tr("HTML 文档(*.htm *.html);;所有文件(*.*)"));
  4. if(!filename.isEmpty()){
  5. QMdiSubWindow *existing=findMyChild(filename);
  6. if(existing){
  7. //如果发现该文件已经打开,则直接设置为子窗口为活动窗口
  8. mdiArea->setActiveSubWindow(existing);
  9. return ;
  10. }
  11. MyChild *child=createMyChild();
  12. //如果文件没有打开则直接加载要打开的文件,并添加新的子窗口
  13. if(child->LoadFile(filename)){
  14. statusBar()->showMessage(tr("文件已经加载"),2000);
  15. child->show();
  16. enabledText();
  17. }else{
  18. child->close();
  19. }
  20. }
  21. }

接着就是保存以及另存为:直接调用就好:

  1. void MyWord::fileSave()
  2. {
  3. if(activeMyChild()&&activeMyChild()->Save()){
  4. statusBar()->showMessage(tr("word文档保存成功."),2000);
  5. }
  6. }
  7. void MyWord::fileSaveAs()
  8. {
  9. if(activeMyChild()&&activeMyChild()->SaveAs()){
  10. statusBar()->showMessage(tr("word文档另存为成功"));
  11. }
  12. }

撤销,粘贴,复制等操作也是如此:

(系统里都有,那我们为何不直接使用呢?)

  1. void MyWord::undo()
  2. {
  3. if(activeMyChild()){
  4. activeMyChild()->undo();
  5. }
  6. }
  7. void MyWord::redo()
  8. {
  9. if(activeMyChild()){
  10. activeMyChild()->redo();
  11. }
  12. }
  13. void MyWord::cut()
  14. {
  15. if(activeMyChild()){
  16. activeMyChild()->cut();
  17. }
  18. }
  19. void MyWord::copy()
  20. {
  21. if(activeMyChild()){
  22. activeMyChild()->copy();
  23. }
  24. }
  25. void MyWord::paste()
  26. {
  27. if(activeMyChild()){
  28. activeMyChild()->paste();
  29. }
  30. }void MyWord::undo()
  31. {
  32. if(activeMyChild()){
  33. activeMyChild()->undo();
  34. }
  35. }
  36. void MyWord::redo()
  37. {
  38. if(activeMyChild()){
  39. activeMyChild()->redo();
  40. }
  41. }
  42. void MyWord::cut()
  43. {
  44. if(activeMyChild()){
  45. activeMyChild()->cut();
  46. }
  47. }
  48. void MyWord::copy()
  49. {
  50. if(activeMyChild()){
  51. activeMyChild()->copy();
  52. }
  53. }
  54. void MyWord::paste()
  55. {
  56. if(activeMyChild()){
  57. activeMyChild()->paste();
  58. }
  59. }

加粗,倾斜:

要新建一个QTextFormat 用来判断是否已经加粗了,没有加粗我们直接进行加粗,有的话变为正常。在调用一下mychild中的函数格式字体。倾斜下划线同理:

  1. void MyWord::textBold()
  2. {
  3. QTextCharFormat fmt;
  4. fmt.setFontWeight(boldAct->isChecked()?QFont::Bold:QFont::Normal);
  5. if(activeMyChild()){
  6. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  7. }
  8. }
  9. void MyWord::textIalic()
  10. {
  11. QTextCharFormat fmt;
  12. fmt.setFontItalic(italicAct->isChecked());
  13. if(activeMyChild()){
  14. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  15. }
  16. }void MyWord::textUnderline()
  17. {
  18. QTextCharFormat fmt;
  19. fmt.setFontUnderline(underlineAct->isChecked());
  20. if(activeMyChild()){
  21. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  22. }
  23. }

对齐

设置对其,我们就是要判断是什么对齐方法,跟据你选中的来设置。

  1. void MyWord::textAlign(QAction *a)
  2. {
  3. if(activeMyChild()){
  4. if(a==leftAlignAct){
  5. activeMyChild()->SetAlign(1);
  6. }else if(a==centerAct){
  7. activeMyChild()->SetAlign(2);
  8. }else if(a==rightAlignAct){
  9. activeMyChild()->SetAlign(3);
  10. }else if(a==justifyAct){
  11. activeMyChild()->SetAlign(4);
  12. }
  13. }
  14. }

设置段落风格:

  1. void MyWord::textStyle(int styleIndex)
  2. {
  3. if(activeMyChild()){
  4. activeMyChild()->SetStyle(styleIndex);
  5. }
  6. }

字体选择框:

  1. void MyWord::textFamily(const QString &f)
  2. {
  3. QTextCharFormat fmt;
  4. fmt.setFontFamily(f);
  5. if(activeMyChild()){
  6. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  7. }
  8. }

文本大小:

  1. void MyWord::textSize(const QString &p)
  2. {
  3. qreal pointsize=p.toFloat();
  4. if(p.toFloat()>0){
  5. QTextCharFormat fmt;
  6. fmt.setFontPointSize(pointsize);
  7. if(activeMyChild()){
  8. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  9. }
  10. }
  11. }

效果如图:

 

  1. void MyWord::textColor()
  2. {
  3. if(activeMyChild()){
  4. QColor color=QColorDialog::getColor(activeMyChild()->textColor(),this);
  5. if(!color.isValid()){
  6. return ;
  7. }
  8. QTextCharFormat fmt;
  9. //将画板设置为前台显示
  10. fmt.setForeground(color);
  11. activeMyChild()->MergeFormationOnWordOrSelection(fmt);
  12. colorChanged(color);
  13. }
  14. }
  15. void MyWord::fontChanged(const QFont &f)
  16. {
  17. comboFont->setCurrentIndex(comboFont->findText(QFontInfo(f).family()));
  18. comboSize->setCurrentIndex(comboSize->findText(QString::number(f.pointSize())));
  19. boldAct->setChecked(f.bold());
  20. italicAct->setChecked(f.italic());
  21. underlineAct->setChecked(f.underline());
  22. }
  23. void MyWord::colorChanged(const QColor &c)
  24. {
  25. QPixmap pix(16,16);
  26. pix.fill(c);
  27. colorAct->setIcon(pix);
  28. }
  29. void MyWord::alignmentChange(Qt::Alignment a)
  30. {
  31. if(a & Qt::AlignLeft)
  32. leftAlignAct->setChecked(true);
  33. else if(a & Qt::AlignCenter)
  34. centerAct->setChecked(true);
  35. else if(a & Qt::AlignRight)
  36. rightAlignAct->setChecked(true);
  37. else if(a & Qt::AlignJustify)
  38. justifyAct->setChecked(true);
  39. }
  40. void MyWord::about()
  41. {
  42. QMessageBox::about(this,tr("关于"),tr("此软件是基于Qt5实现的文字处理软件!!!"));
  43. }
  1. void MyWord::filePrintfPreview()
  2. {
  3. QPrinter printer(QPrinter::HighResolution);
  4. QPrintPreviewDialog preview(&printer,this);
  5. connect(&preview,SIGNAL(paintRequested(QPinter*)),this,SLOT(printPreview(QPrinter*)));
  6. }
  7. void MyWord::printPrint()
  8. {
  9. QPrinter printer(QPrinter::HighResolution);
  10. QPrintDialog *pdlg=new QPrintDialog(&printer,this);
  11. if(activeMyChild()->textCursor().hasSelection()){
  12. pdlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
  13. }
  14. pdlg->setWhatsThis(tr("打印文档"));
  15. if(pdlg->exec()==QDialog::Accepted){
  16. activeMyChild()->print(&printer);
  17. }
  18. delete pdlg;
  19. }

这是一个Qt框架下的打印功能实现,可以实现打印预览和打印文档的功能。具体解释如下:

  • - `void MyWord::filePrintfPreview()` 函数定义了打印预览的功能。首先创建了一个 `QPrinter` 对象,然后通过 `QPrintPreviewDialog` 类来实现打印预览对话框,并且连接了 `paintRequested()` 信号到 `printPreview(QPrinter*)` 槽函数。当用户在预览对话框中点击打印按钮时,槽函数将被调用。
  • - `void MyWord::printPrint()` 函数定义了打印文档的功能。同样创建了一个 `QPrinter` 对象,然后使用 `QPrintDialog` 类来弹出打印对话框,可以选择打印全部或者只打印选中部分。当用户点击确定按钮时,将激活当前文档编辑器中的 `print()` 函数进行打印操作。

基本差不多就完工了。应该没有什么遗漏了吧。

做这个小项目主要也就是对之前学习的一个回顾与总结,这个项目也并不是多难,熟悉一下之前使用过的一些函数,整体并不是很难,之后再做什么大项目,也是有一个个小项目组合而来,慢慢写就好了。

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

闽ICP备14008679号