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

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

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

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

(7)文档内容操作

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

cpp 复制代码
void MainWindow::on_undoAction_triggered()
{
    docUndo();
}

void MainWindow::on_redoAction_triggered()
{
    docRedo();
}

void MainWindow::on_cutAction_triggered()
{
    docCut();
}

void MainWindow::on_copyAction_triggered()
{
    docCopy();
}

void MainWindow::on_pasteAction_triggered()
{
    docPaste();
}


//撤销(上一步)
void MainWindow::docUndo()
{
    if(activateChildWnd())
        activateChildWnd()->undo();
}

//重写(下一步)
void MainWindow::docRedo()
{
    if(activateChildWnd())
        activateChildWnd()->redo();
}

//剪切
void MainWindow::docCut()
{
    if(activateChildWnd())
        activateChildWnd()->cut();
}

//复制
void MainWindow::docCopy()
{
    if(activateChildWnd())
        activateChildWnd()->copy();
}

//粘贴
void MainWindow::docPaste()
{
    if(activateChildWnd())
        activateChildWnd()->paste();
}

(8)字体格式

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

复制代码
void setFormatOnSelectedWord(const QTextCharFormat &fmt);//对选中的字体格式进行设置
cpp 复制代码
void ChileWnd::setFormatOnSelectedWord(const QTextCharFormat &fmt)
{
    //获取文档光标
    QTextCursor tcursor = textCursor();
    if(!tcursor.hasSelection())
        tcursor.select(QTextCursor::WordUnderCursor);//选中模式
    tcursor.mergeCharFormat(fmt);
    //合并格式
    mergeCurrentCharFormat(fmt);
}
cpp 复制代码
//转到槽
void on_blodAction_triggered();

void on_inclineAction_triggered();

void on_underlineAction_triggered();
cpp 复制代码
void MainWindow::on_blodAction_triggered()
{
    textBold();
}

void MainWindow::on_inclineAction_triggered()
{
    textItalic();
}

void MainWindow::on_underlineAction_triggered()
{
    textUnderline();
}

//加粗
void MainWindow::textBold()
{
    QTextCharFormat fmt;
    fmt.setFontWeight(ui->blodAction->isChecked() ? QFont::Bold : QFont::Normal);
    if(activateChildWnd())
        activateChildWnd()->setFormatOnSelectedWord(fmt);
}

//倾斜
void MainWindow::textItalic()
{
    QTextCharFormat fmt;
    fmt.setFontItalic(ui->inclineAction->isChecked());
    if(activateChildWnd())
        activateChildWnd()->setFormatOnSelectedWord(fmt);
}

//下划线
void MainWindow::textUnderline()
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(ui->underlineAction->isChecked());
    if(activateChildWnd())
        activateChildWnd()->setFormatOnSelectedWord(fmt);
}

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

(9)字号字体

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

cpp 复制代码
void textFamily(const QString &fmly); //设置字体
void textSize(const QString &ps); //设置字号
cpp 复制代码
void MainWindow::on_fontComboBox_activated(const QString &arg1)
{
    textFamily(arg1);
}

void MainWindow::on_sizeComboBox_activated(const QString &arg1)
{
    textSize(arg1);
}

//设置字体
void MainWindow::textFamily(const QString &fmly)
{
    QTextCharFormat fmt;
    fmt.setFontFamily(fmly);
    if(activateChildWnd())
        activateChildWnd()->setFormatOnSelectedWord(fmt);
}

//设置字号
void MainWindow::textSize(const QString &ps)
{
    qreal pointSize = ps.toFloat();
    if(ps.toFloat() > 0)
    {
        QTextCharFormat fmt;
        fmt.setFontPointSize(pointSize);
        if(activateChildWnd())
            activateChildWnd()->setFormatOnSelectedWord(fmt);
    }
}

(10)段落对齐

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

cpp 复制代码
//对齐方式互斥性,一次只能选一种
    QActionGroup *alignGroup = new QActionGroup(this);
    alignGroup->addAction(ui->leftAction);
    alignGroup->addAction(ui->rightAction);
    alignGroup->addAction(ui->centerAction);
    alignGroup->addAction(ui->justifyAction);

然后完成段落对齐的逻辑

cpp 复制代码
void setAlignOfDocumentText(int aligntype); //设置段落对齐方式
cpp 复制代码
//设置段落对齐方式
void ChileWnd::setAlignOfDocumentText(int aligntype)
{
    //给传入的参数设置编号,1-->左端对齐,2-->右端对齐,3-->居中对齐,4-->两端对齐
    if(aligntype == 1)
    {
        setAlignment(Qt::AlignLeft | Qt::AlignAbsolute);
    }
    else if(aligntype == 2)
    {
        setAlignment(Qt::AlignRight | Qt::AlignAbsolute);
    }
    else if(aligntype == 3)
    {
        setAlignment(Qt::AlignCenter);
    }
    else if(aligntype == 4)
    {
        setAlignment(Qt::AlignJustify);
    }
}
cpp 复制代码
    void on_leftAction_triggered();
    
    void on_rightAction_triggered();
    
    void on_centerAction_triggered();
    
    void on_justifyAction_triggered();
cpp 复制代码
void MainWindow::on_leftAction_triggered()
{
    if(activateChildWnd())
        activateChildWnd()->setAlignOfDocumentText(1);
}

void MainWindow::on_rightAction_triggered()
{
    if(activateChildWnd())
        activateChildWnd()->setAlignOfDocumentText(2);
}

void MainWindow::on_centerAction_triggered()
{
    if(activateChildWnd())
        activateChildWnd()->setAlignOfDocumentText(3);
}

void MainWindow::on_justifyAction_triggered()
{
    if(activateChildWnd())
        activateChildWnd()->setAlignOfDocumentText(4);
}
相关推荐
满怀10151 小时前
Python扩展知识详解:lambda函数
开发语言·python
佚名涙2 小时前
go中锁的入门到进阶使用
开发语言·后端·golang
猫猫的小茶馆2 小时前
【PCB工艺】软件是如何控制硬件的发展过程
开发语言·stm32·单片机·嵌入式硬件·mcu·51单片机·pcb工艺
勘察加熊人3 小时前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf
小黄人软件4 小时前
C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
开发语言·c#
二进制人工智能5 小时前
【QT5 网络编程示例】TCP 通信
网络·c++·qt·tcp/ip
Android洋芋6 小时前
C语言深度解析:从零到系统级开发的完整指南
c语言·开发语言·stm32·条件语句·循环语句·结构体与联合体·指针基础
bjxiaxueliang7 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt
此刻我在家里喂猪呢7 小时前
qt介绍tcp通信
qt·tcp/ip
Run_Teenage7 小时前
C语言 【初始指针】【指针一】
c语言·开发语言