一、实现格式菜单
格式
字体(&D)
字体颜色
加粗(&B)
倾斜(&I)
下划线(&U)
背景色
二、效果演示
qt文件编辑器——格式菜单
三、代码
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这个类,用于获取光标所在行的文本。
关注博主,继续更新哟~