QT文本编辑器———第四弹(字体、字体颜色、加粗、倾斜、下划线、背景色)

QT文本编辑器———第四弹

  • 一、实现格式菜单
  • 二、效果演示
  • 三、代码
    • 1.mainwindow.h
    • 2.mainwindow.cpp
      • 1)字体、字体颜色
      • 2)加粗、倾斜、下划线、背景色
  • 四、反思总结

一、实现格式菜单

格式
字体(&D)
字体颜色
加粗(&B)
倾斜(&I)
下划线(&U)
背景色

二、效果演示

qt文件编辑器——格式菜单

QT文本编辑器———第四弹(字体、字体颜色、加粗、倾斜、下划线、背景色)_第1张图片

三、代码

1.mainwindow.h

注意要点:加粗、倾斜、下划线的功能;比如点击倾斜,光标选区字符就倾斜了,再点击倾斜,倾斜效果就取消了, boldcheck,Italiccheck,UnderLinecheck要为全局变量,用于检测该功能的前一个状态。

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    int   boldcheck,Italiccheck,UnderLinecheck ; //全局变量,加粗、倾斜、下划线。用于检测这个功能的前一个状态
    
private slots://槽函数
    void mergeFormat(QTextCharFormat fmt);//光标区域
    
    void on_action_left_triggered();

    void on_action_center_triggered();

    void on_action_right_triggered();
   

2.mainwindow.cpp

注意要点:字体、字体颜色、加粗、倾斜、下划线,这些子菜单应该是作用于一个光标选区的(参考word文档),因此我们要写一个设置光标选区的函数,使格式作用于选区。

/*****************字体、字体颜色、加粗、倾斜、下划线、背景色******************/
void MainWindow::mergeFormat(QTextCharFormat fmt)//设置光标选区,使格式作用于选区
{
    QTextCursor cursor = textEdit->textCursor();
    if(!cursor.hasSelection()){
        cursor.select(QTextCursor::WordUnderCursor);
    }
    cursor.mergeCharFormat(fmt);
}

1)字体、字体颜色

void MainWindow::on_action_D_triggered()//字体
{
    qDebug() << "setFont";
    bool ok;// 用户字体对话框是否选择了字体
    QFont font = QFontDialog::getFont(&ok,QFont("Arial",20),this,"选择要设置的字体");//第一个参数是判断用户是否选择了字体,第二个是字体对话框的初始值
    if(ok)
        textEdit->setCurrentFont(font);//设置选中文本的字体
}

void MainWindow::on_font_color_triggered()//字体颜色
{
    qDebug() << "setFontColor";
    QColor color = QColorDialog::getColor(Qt::black,this,"选择要设置的字体颜色");//第一个是颜色对话框的初始值
    textEdit->setTextColor(color);
}

2)加粗、倾斜、下划线、背景色

注意要点:加粗、倾斜、下划线设置效果前,要判断 boldcheck,Italiccheck,UnderLinecheck的状态,设置完格式后,要将状态置反。

void MainWindow::on_action_B_triggered()//加粗
{
    qDebug() << "setFontWeight";
    QTextCharFormat fmt;
    fmt.setFontWeight(boldcheck ? QFont::Bold : QFont::Normal);
    mergeFormat(fmt);
    boldcheck = !boldcheck;
}

void MainWindow::on_action_I_triggered()//倾斜
{
     qDebug() << "setFontItalic";
     QTextCharFormat fmt;
     fmt.setFontItalic(Italiccheck ? true : false);
     mergeFormat(fmt);
     Italiccheck = !Italiccheck;
}

void MainWindow::on_action_U_triggered()//下划线
{
     qDebug() << "setUnderLine";
     QTextCharFormat fmt;
     fmt.setFontUnderline(UnderLinecheck ? true : false);
     mergeFormat(fmt);
     UnderLinecheck = !UnderLinecheck;
}

void MainWindow::on_background_color_triggered()//背景色
{
    qDebug() << "getColor";

    QColor color = QColorDialog::getColor(Qt::blue,this,"Set Text Background Color");//初始颜色
    //通过调色板修改textEdit背景色
    QPalette palette = textEdit->palette();//获取textEdit当前的调色板
    palette.setColor(QPalette::Base,color);//设置背景颜色
    textEdit->setPalette(palette);//将调色板上设置好的颜色设置给文本编辑器textEdit
}

四、反思总结

在原版本基础上做了优化,增加了背景色的选项,工具栏添加了字体、字号、背景色。整体还是比较简单的,要注意的是QTextCursor这个类,用于获取光标所在行的文本。
关注博主,继续更新哟~

你可能感兴趣的:(qt,ui,qt,开发语言,ui,c++,学习)