1. 模拟记事本
设计一个记事本
(1)更改字体颜色
(2)更改字体大小
(3)新建记事本
(4)查找记事本中的数据
(5)设置消息提示
(6)设置粘贴、复制、剪切、撤销等
......................
my_notepad
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QAction>
#include <QPushButton>
#include <QMenu>
#include <QToolBar>
#include <QFontDialog>
#include <QFont>
#include <QColorDialog>
#include <QColor>
#include <QPlainTextEdit>
#include <QDockWidget>
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
//执行新建操作
void create_text();
//执行另存为操作
void rece_lingcunwei();
//执行打开操作
void dakai();
//执行查找操作
void my_search();
//执行剪切操作
void jianqie();
//复制操作
void fuzhi();
//粘贴操作
void zhantie();
//撤销操作
void chexiao();
//执行加粗
void jia_cu();
//执行字体变大
void zitiBig();
//执行字体变小
void zitiSmall();
//执行字体颜色改变
void zitiColor();
private:
Ui::MainWindow *ui;
//菜单栏
//新建动作
QAction* action_create = new QAction();
//打开动作
QAction* action_dakai = new QAction();
//另存为动作
QAction* action_lingcunwei = new QAction();
//查找动作
QAction* action_search = new QAction();
//剪切操作
QAction* action_jianqie = new QAction();
//复制操作
QAction* action_copy = new QAction();
//粘贴操作
QAction* action_zhantie = new QAction();
//撤销操作
QAction* action_chexiao = new QAction();
//实例化工具栏
QToolBar* toolBar = new QToolBar;
//加粗动作
QAction* jiacu = new QAction();
//字体变大动作
QAction* ziti_big = new QAction();
//字体变大动作
QAction* ziti_small = new QAction();
//改变字体颜色
QAction* ziti_color = new QAction();
//状态栏
QPushButton* btn4 = new QPushButton("100%");
QPushButton* btn5 = new QPushButton("UTF-8");
QPushButton* btn6 = new QPushButton("第1行 第5列");
//工作区
//实例化纯文本编辑框
QPlainTextEdit* plainTextEdit = new QPlainTextEdit;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
/*
设计一个记事本
(1)更改字体颜色
(2)更改字体大小
(3)新建记事本
(4)查找记事本中的数据
(5)设置消息提示
(6)设置粘贴、复制、剪切、撤销等
......................
*/
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenu* menu_dir = ui->menubar->addMenu("文件(F)");
action_create = menu_dir->addAction("新建(N)");
action_dakai = menu_dir->addAction("打开(O)");
action_lingcunwei = menu_dir->addAction("另存为(A)");
menu_dir->addMenu("退出(X)");
QMenu* menu_edit = ui->menubar->addMenu("编辑(E)");
action_chexiao = menu_edit->addAction("撤销");
action_jianqie = menu_edit->addAction("剪切");
action_copy = menu_edit->addAction("复制");
action_zhantie = menu_edit->addAction("粘贴");
action_search = menu_edit->addAction("查找");
QMenu* menu_geshi = ui->menubar->addMenu("格式(O)");
menu_geshi->addMenu("字体");
QMenu* menu_look = ui->menubar->addMenu("查看(V)");
menu_look->addMenu("缩放");
menu_look->addMenu("状态栏");
QMenu* menu_help = ui->menubar->addMenu("帮助(H)");
menu_help->addMenu("查看帮助");
//绑定新建动作
connect(this->action_create,SIGNAL(triggered()),this,SLOT(create_text()));
//绑定用户点击 另存为... 执行一个动作,就会触发一个信号
connect(this->action_lingcunwei,SIGNAL(triggered()),this,SLOT(rece_lingcunwei()));
//绑定打开操作
connect(this->action_dakai,SIGNAL(triggered()),this,SLOT(dakai()));
//绑定查找操作
connect(this->action_search,SIGNAL(triggered()),this,SLOT(my_search()));
//绑定剪切操作
connect(this->action_jianqie,SIGNAL(triggered()),this,SLOT(jianqie()));
//绑定复制操作
connect(this->action_copy,SIGNAL(triggered()),this,SLOT(fuzhi()));
//绑定粘贴操作
connect(this->action_zhantie,SIGNAL(triggered()),this,SLOT(zhantie()));
//绑定撤销操作
connect(this->action_chexiao,SIGNAL(triggered()),this,SLOT(chexiao()));
//添加一个工具栏
this->addToolBar(this->toolBar);
//加粗
this->jiacu = this->toolBar->addAction("B");
//字体变大
this->ziti_big = this->toolBar->addAction("A");
//字体变小
this->ziti_small = this->toolBar->addAction("a");
//改变字体颜色
this->ziti_color = this->toolBar->addAction("C");
//绑定加粗动作
connect(this->jiacu,SIGNAL(triggered()),this,SLOT(jia_cu()));
//绑定字体变大动作
connect(this->ziti_big,SIGNAL(triggered()),this,SLOT(zitiBig()));
//绑定字体变小动作
connect(this->ziti_small,SIGNAL(triggered()),this,SLOT(zitiSmall()));
//绑定字体颜色动作
connect(this->ziti_color,SIGNAL(triggered()),this,SLOT(zitiColor()));
//添加状态栏
ui->statusbar->setSizeGripEnabled(true);//右下角有三角网格
this->btn4->setFlat(true);//隐藏按钮的边框
ui->statusbar->addWidget(this->btn4);
//设置位置
this->btn5->setFlat(true);
ui->statusbar->addPermanentWidget(this->btn5);//设置到右边
this->btn6->setFlat(true);
ui->statusbar->addPermanentWidget(this->btn6);//设置到右边
//添加工作区
//向中心工作区添加纯文本编辑框
this->setCentralWidget(this->plainTextEdit);
}
MainWindow::~MainWindow()
{
delete ui;
}
//执行新建操作
void MainWindow::create_text(){
//再打开一个窗口
MainWindow* w2 = new MainWindow;
w2->show();
}
//执行另存为操作
void MainWindow::rece_lingcunwei(){
qDebug()<<"执行另存为..."<<endl;
QString title = "保存文件";
QString dir = "E:/";
//设置文件过滤类型
QString filter = "文本文件(*.txt)";
//这里的fileName保存的用户打开的路径
QString fileName = QFileDialog::getSaveFileName(this,title,dir,filter);
if(!fileName.isEmpty()){
//直接操作文件
QFile file(fileName);
//打开文件
if(file.open(QIODevice::ReadWrite|QIODevice::Text)){
//取出用户输入
QString data = plainTextEdit->toPlainText();
//写入
file.write(data.toUtf8());//toUtf8() 将QString转为QByteArray类型
}
file.close();//关闭
}
//另存为完成后,关闭记事本界面
this->close();
}
//打开操作
void MainWindow::dakai(){
//打开操作就相当于读取文件内容
qDebug()<<"执行打开操作"<<endl;
QString title = "打开文件";
QString dir = "E:/";
//设置文件过滤类型
QString filter = "文本文件(*.txt)";
//这里的fileName保存的用户打开的路径
QString fileName = QFileDialog::getOpenFileName(this,title,dir,filter);
if(!fileName.isEmpty()){
//直接操作文件
QFile file(fileName);
//打开文件
if(file.open(QIODevice::ReadOnly|QIODevice::Text)){
//读取文件内容
QByteArray data = file.readAll();
//再打开一个窗口
MainWindow* w3 = new MainWindow;
w3->show();
//写入记事本
w3->plainTextEdit->appendPlainText(data);
}
file.close();//关闭
}
}
//执行查找操作
void MainWindow::my_search(){
//输入对话框
// 获取查找文本
QString searchText = QInputDialog::getText(this, "查找", "请输入要查找的文本:");
if (searchText.isEmpty()) {
// 用户取消了查找
return;
}
// 在文本中查找
//先获取光标位置
QTextCursor cursor = plainTextEdit->textCursor();
//将文本光标(QTextCursor)移动到文本的开头位置。
cursor.movePosition(QTextCursor::Start);
//设置光标的位置在开头
plainTextEdit->setTextCursor(cursor);
//plainTextEdit->find(searchText)查找内容,用于在文本编辑器中查找指定的文本,并返回一个布尔值
while (plainTextEdit->find(searchText)) {
// 选中将找到的文本
plainTextEdit->setTextCursor(plainTextEdit->textCursor());
// 询问用户是否继续查找
QMessageBox::StandardButton reply = QMessageBox::question(this, "继续查找", "是否继续查找?",QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::No) {
break;
}
// 将光标移到下一个字符位置以便继续查找
cursor.movePosition(QTextCursor::NextCharacter);
}
}
//剪切操作
void MainWindow::jianqie(){
plainTextEdit->cut();
}
//复制操作
void MainWindow::fuzhi(){
plainTextEdit->copy();
}
//粘贴操作
void MainWindow::zhantie(){
plainTextEdit->paste();
}
//撤销操作
void MainWindow::chexiao(){
plainTextEdit->undo();
}
//执行加粗
void MainWindow::jia_cu(){
qDebug()<<"字体加粗";
// bool ok = false;
// //选择字体格式
// QFont font = QFontDialog::getFont(&ok,this);
// if(ok){
// //定位光标操作文本
// QTextCursor cursor = plainTextEdit->textCursor();
// //通过 QTextCharFormat,你可以设置文本的字体、字号、颜色、背景颜色、粗体、斜体等属性。
// QTextCharFormat format;
// format.setFont(font);
// //把格式设置给选中文本
// cursor.mergeCharFormat(format);
// qDebug()<<"字体设置成功"<<endl;
// }
//定位光标操作文本
QTextCursor cursor = plainTextEdit->textCursor();
//获取当前文本格式
QTextCharFormat format = cursor.charFormat();
//获取当前字体
QFont font = format.font();
// 切换加粗状态
font.setBold(!font.bold());
// 将新的字体应用于格式
format.setFont(font);
// 将新的格式应用于选中的文本
cursor.mergeCharFormat(format);
}
//执行字体变大
void MainWindow::zitiBig(){
qDebug()<<"字体大小改变";
//定位光标操作文本
QTextCursor cursor = plainTextEdit->textCursor();
//获取当前文本格式
QTextCharFormat format = cursor.charFormat();
//获取当前字体
QFont font = format.font();
// 获取当前字体大小
qreal currentSize = font.pointSizeF();
//增加字体大小
qreal newSize = currentSize + 2;
//设置新的字体大小
font.setPointSizeF(newSize);
// 将新的字体应用于格式
format.setFont(font);
//把格式设置给选中文本
cursor.mergeCharFormat(format);
qDebug()<<"字体变大成功"<<endl;
}
//执行字体变小
void MainWindow::zitiSmall(){
qDebug()<<"字体大小改变";
//定位光标操作文本
QTextCursor cursor = plainTextEdit->textCursor();
//获取当前文本格式
QTextCharFormat format = cursor.charFormat();
//获取当前字体
QFont font = format.font();
// 获取当前字体大小
qreal currentSize = font.pointSizeF();
//增加字体大小
qreal newSize = currentSize - 2;
//设置新的字体大小
font.setPointSizeF(newSize);
// 将新的字体应用于格式
format.setFont(font);
//把格式设置给选中文本
cursor.mergeCharFormat(format);
qDebug()<<"字体变大成功"<<endl;
}
//改变字体颜色
void MainWindow::zitiColor(){
//选择字体颜色
QColor color = QColorDialog::getColor(Qt::red,this,"颜色设置");
//获取文本光标
QTextCursor cursor = plainTextEdit->textCursor();
QTextCharFormat format;
//设置颜色格式
format.setForeground(color);
//将颜色设置给当前字体
cursor.mergeCharFormat(format);
}
测试
改变字体颜色
更改字体大小
新建记事本
查找内容
复制粘贴等
打开记事本
另存为