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

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

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

新建word:

void MyWord::fileNew()
{
    qDebug()<<"hhh";
    MyChild *child=createMyChild();
    child->NewFile();
    child->show();

    enabledText();//使得 字体设置菜单可用
}

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

下一步打开文档:

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

void MyWord::fileOpen()
{
    QString filename=QFileDialog::getOpenFileName(this,tr("打开"),QString(),tr("HTML 文档(*.htm *.html);;所有文件(*.*)"));

    if(!filename.isEmpty()){
        QMdiSubWindow *existing=findMyChild(filename);
        if(existing){
//如果发现该文件已经打开,则直接设置为子窗口为活动窗口
            mdiArea->setActiveSubWindow(existing);
            return ;
        }
        MyChild  *child=createMyChild();
//如果文件没有打开则直接加载要打开的文件,并添加新的子窗口
        if(child->LoadFile(filename)){
            statusBar()->showMessage(tr("文件已经加载"),2000);
            child->show();
            enabledText();
        }else{
            child->close();
        }
    }
}

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

void MyWord::fileSave()
{
    if(activeMyChild()&&activeMyChild()->Save()){
        statusBar()->showMessage(tr("word文档保存成功."),2000);
    }
}
void MyWord::fileSaveAs()
{
    if(activeMyChild()&&activeMyChild()->SaveAs()){
        statusBar()->showMessage(tr("word文档另存为成功"));
    }
}

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

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

void MyWord::undo()
{
    if(activeMyChild()){
        activeMyChild()->undo();
    }
}

void MyWord::redo()
{
    if(activeMyChild()){
        activeMyChild()->redo();
    }
}

void MyWord::cut()
{
    if(activeMyChild()){
        activeMyChild()->cut();
    }
}

void MyWord::copy()
{
    if(activeMyChild()){
        activeMyChild()->copy();
    }
}

void MyWord::paste()
{
    if(activeMyChild()){
        activeMyChild()->paste();
    }
}void MyWord::undo()
{
    if(activeMyChild()){
        activeMyChild()->undo();
    }
}

void MyWord::redo()
{
    if(activeMyChild()){
        activeMyChild()->redo();
    }
}

void MyWord::cut()
{
    if(activeMyChild()){
        activeMyChild()->cut();
    }
}

void MyWord::copy()
{
    if(activeMyChild()){
        activeMyChild()->copy();
    }
}

void MyWord::paste()
{
    if(activeMyChild()){
        activeMyChild()->paste();
    }
}

加粗,倾斜:

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

void MyWord::textBold()
{
    QTextCharFormat fmt;
    fmt.setFontWeight(boldAct->isChecked()?QFont::Bold:QFont::Normal);
    if(activeMyChild()){
        activeMyChild()->MergeFormationOnWordOrSelection(fmt);
    }
}
void MyWord::textIalic()
{
    QTextCharFormat fmt;
    fmt.setFontItalic(italicAct->isChecked());

    if(activeMyChild()){
        activeMyChild()->MergeFormationOnWordOrSelection(fmt);
    }
}void MyWord::textUnderline()
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(underlineAct->isChecked());

    if(activeMyChild()){
        activeMyChild()->MergeFormationOnWordOrSelection(fmt);
    }
}

对齐

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

void MyWord::textAlign(QAction *a)
{
    if(activeMyChild()){
        if(a==leftAlignAct){
            activeMyChild()->SetAlign(1);
        }else if(a==centerAct){
            activeMyChild()->SetAlign(2);
        }else if(a==rightAlignAct){
            activeMyChild()->SetAlign(3);
        }else if(a==justifyAct){
            activeMyChild()->SetAlign(4);
        }
    }
}

设置段落风格:

void MyWord::textStyle(int styleIndex)
{
    if(activeMyChild()){
        activeMyChild()->SetStyle(styleIndex);
    }
}

字体选择框:

void MyWord::textFamily(const QString &f)
{
    QTextCharFormat fmt;
    fmt.setFontFamily(f);
    if(activeMyChild()){
        activeMyChild()->MergeFormationOnWordOrSelection(fmt);
    }
}

文本大小:

void MyWord::textSize(const QString &p)
{
    qreal pointsize=p.toFloat();
    if(p.toFloat()>0){
        QTextCharFormat fmt;
        fmt.setFontPointSize(pointsize);
        if(activeMyChild()){
            activeMyChild()->MergeFormationOnWordOrSelection(fmt);
        }
    }
}

效果如图:

 

void MyWord::textColor()
{
    if(activeMyChild()){
        QColor color=QColorDialog::getColor(activeMyChild()->textColor(),this);
        if(!color.isValid()){
            return ;
        }
        QTextCharFormat fmt;
//将画板设置为前台显示
        fmt.setForeground(color);
        activeMyChild()->MergeFormationOnWordOrSelection(fmt);
        colorChanged(color);
    }
}
void MyWord::fontChanged(const QFont &f)
{
    comboFont->setCurrentIndex(comboFont->findText(QFontInfo(f).family()));
    comboSize->setCurrentIndex(comboSize->findText(QString::number(f.pointSize())));

    boldAct->setChecked(f.bold());
    italicAct->setChecked(f.italic());
    underlineAct->setChecked(f.underline());
}

void MyWord::colorChanged(const QColor &c)
{
    QPixmap pix(16,16);
    pix.fill(c);
    colorAct->setIcon(pix);
}

void MyWord::alignmentChange(Qt::Alignment a)
{
    if(a & Qt::AlignLeft)
        leftAlignAct->setChecked(true);
    else if(a & Qt::AlignCenter)
        centerAct->setChecked(true);
    else if(a & Qt::AlignRight)
        rightAlignAct->setChecked(true);
    else if(a & Qt::AlignJustify)
        justifyAct->setChecked(true);
}


void MyWord::about()
{
    QMessageBox::about(this,tr("关于"),tr("此软件是基于Qt5实现的文字处理软件!!!"));

}
void MyWord::filePrintfPreview()
{
    QPrinter printer(QPrinter::HighResolution);
    QPrintPreviewDialog preview(&printer,this);
    connect(&preview,SIGNAL(paintRequested(QPinter*)),this,SLOT(printPreview(QPrinter*)));
}

void MyWord::printPrint()
{
    QPrinter printer(QPrinter::HighResolution);
    QPrintDialog *pdlg=new QPrintDialog(&printer,this);
    if(activeMyChild()->textCursor().hasSelection()){
        pdlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
    }
    pdlg->setWhatsThis(tr("打印文档"));
    if(pdlg->exec()==QDialog::Accepted){
        activeMyChild()->print(&printer);
    }
    delete pdlg;

}

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

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

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

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

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyQt6是一个强大的Python GUI工具包,可以用于制作各种应用程序,包括类似Word编辑器。下面是使用PyQt6制作类似Word编辑器的一些步骤和注意事项: 1. 安装PyQt6:首先,你需要安装PyQt6库。可以使用pip命令在终端或命令提示符中运行以下命令进行安装:```pip install PyQt6``` 2. 创建一个GUI应用程序:使用PyQt6创建一个GUI应用程序的模板。你可以使用QApplication类来创建Qt应用程序的实例。 3. 创建主窗口:在主窗口中,你可以添加菜单栏、工具栏、工具栏按钮等。你可以使用QMainWindow类创建一个主窗口。 4. 添加编辑区域:在编辑区域中,你可以添加文本编辑器、图像插入、表格插入等。你可以使用QTextEdit类创建一个文本编辑器部件。 5. 实现保存和打开功能:你可以添加保存和打开功能,使用户可以保存和打开编辑文件。你可以使用QFileDialog类来打开和保存文件。 6. 实现格式化功能:你可以向编辑器中添加各种格式化选项,例如字体、大小、颜色、对齐等。你可以使用QFontDialog和QColorDialog等类来实现这些格式化选项。 7. 添加撤销和重做功能:你可以向编辑器中添加撤销和重做功能,使用户可以撤销和重做编辑的操作。你可以使用QTextEdit的撤销和重做方法来实现这些功能。 8. 实现打印功能:你可以添加打印功能,使用户可以打印编辑的文档。你可以使用QPrintDialog和QPrinter类来实现打印功能。 9. 添加其他功能:除了上述功能,你还可以根据需要添加其他功能,如查找和替换、插入目录、页眉和页脚等。 以上是使用PyQt6制作类似Word编辑器的一些建议。使用PyQt6的灵活性和丰富的功能,你可以根据自己的需求和喜好来设计和实现编辑器的各个部分。 ### 回答2: 如果要使用PyQt6制作一个类似Word编辑器,可以遵循以下几个步骤: 1. 安装PyQt6库:在Python环境中,使用pip或其他包管理工具安装PyQt6库,以便使用其功能。 2. 设计用户界面:使用PyQt6的QWidget和QLayout类创建主窗口,并在其中添加各种组件,例如菜单栏、工具栏、文本编辑区域等。 3. 添加文本编辑功能:使用QTextEdit或QPlainTextEdit等控件作为文本编辑区域,可以设置字体、颜色、对齐方式等属性,并实现基本的编辑功能,如剪切、复制、粘贴、撤销、重做等操作。 4. 添加菜单和工具栏:创建菜单栏和工具栏,并添加各种功能的按钮。例如,可以在菜单栏中添加文件编辑、格式等菜单,并在工具栏中添加常用的编辑按钮,如剪切、复制、粘贴、加粗、斜体等。 5. 添加文件操作功能:实现文件的打开、保存、另存为等操作,可以使用QFileDialog对话框选择文件路径,使用QTextStream读写文件内容。 6. 添加格式设置功能:实现字体、颜色、对齐方式等格式的设置,可以使用QFontDialog、QColorDialog等对话框选择设置。 7. 实现其他功能:根据需求,可以添加并实现其他功能,如撤销、重做、插入图片、表格等操作。 8. 运行和测试:最后,运行程序并测试各个功能是否正常工作,根据需要进行调试和修改。 以上是一个基本的步骤,可以根据实际需求和复杂程度进行适当调整和扩展。PyQt6的文档提供了丰富的示例代码和解释,可以作为参考和学习的资源。 ### 回答3: 通过PyQt6制作一个类似Word编辑器可以按照以下步骤进行: 第一步,导入所需的模块: ```Python from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction ``` 第二步,创建主窗口类: ```Python class Editor(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("编辑器") self.setGeometry(100, 100, 800, 600) self.text_edit = QTextEdit(self) self.setCentralWidget(self.text_edit) self.initMenuBar() def initMenuBar(self): menubar = self.menuBar() file_menu = menubar.addMenu("文件") new_action = QAction("新建", self) file_menu.addAction(new_action) edit_menu = menubar.addMenu("编辑") copy_action = QAction("复制", self) edit_menu.addAction(copy_action) ``` 第三步,启动应用程序: ```Python if __name__ == "__main__": app = QApplication([]) editor = Editor() editor.show() app.exec() ``` 以上代码创建了一个基本的类似于Word编辑器。在这个编辑器中,我们创建了一个主窗口类`Editor`,其中包含一个`QTextEdit`控件作为中心窗口部件,还添加了一个菜单栏,其中包含文件编辑菜单,分别添加了新建和复制动作。用户可以在编辑器中输入和编辑文本,还可以通过菜单栏进行一些基本的编辑操作。 当然,这只是一个简单的开始。如果想要实现更多类似Word的功能,还需要添加更多的控件和逻辑,比如插入图片、设置字体样式、进行格式化等。但以上提供的代码可以作为一个基础框架,供你在此基础上扩展和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值