QT项目实战:Windows下的记事本功能
最终效果:

图【1-1】
菜单栏中的共包含四个动作。打开文件会跳转至当前目录下的windows跳窗,显示所有的txt文档,如图【1-3】

图【1-2】
图【1-3】
若打开之前文档内容已被修改,则会弹框提示是否保存,如图【1-4】

图【1-4】
其他功能与windows下的记事本功能一样,不过多做介绍。再来看工具栏的功能

图【1-5】

图【1-6】
-------------------------------------------我是分割线----------------------------------------------------------------------
接下来讲解实现功能的格各列表代码:
一、初始化构造菜单栏、工具栏、状态栏并由main.cpp的对象W调用从而构造初始界面。
如下:
setWindowIcon(QIcon(":/pohto/yuwenhao.jpg"));设定此APP图标ui->setupUi(this); ui界面作为系统的成员函数,被系统自动建立调用chuangkou=new QMenuBar(this); 创建窗口菜单栏对象this->setMenuBar (this->chuangkou); 将窗口菜单栏对象放在当前的窗口上显示gongju=new QToolBar(this); 实例化工具栏this->addToolBar(this->gongju);zhuangtai=new QStatusBar(this) ;放状态栏到界面上this->setStatusBar(this->zhuangtai);caidan=new QMenu(this);创建的菜单对象1(文件)caidan->setTitle("文件");this->chuangkou->addMenu(caidan);caidan1=new QMenu(this);创建的菜单对象2(编辑)caidan1->setTitle("编辑");this->chuangkou->addMenu(caidan1);caidan2=new QMenu(this);创建的菜单对象3(上面的图没有调用查看这个菜单对象)caidan2->setTitle("查看");this->chuangkou->addMenu(caidan2);
二、初始化构造动作行为赋值给菜单栏中的文件和编辑
Newfile = new QAction(this); //创建一个动作①Newfile->setText("新建文件"); //给当前动作进行命名Newfile->setIcon(QIcon(":/pohto/new.png")) ;//给当前动作给一个执行图标Newfile->setShortcut(QKeySequence::New); //给当前执行动作给一个系统定制的快捷键caidan->addAction(Newfile); //将整理好的动作放进去上面的菜单栏里面open =new QAction(this);open ->setText("打开文件");open->setIcon(QIcon(":/pohto/open.png"));open->setShortcut(QKeySequence::Open);caidan->addAction(open);Save =new QAction(this);Save ->setText("保存文件");Save->setIcon(QIcon(":/pohto/textbold.png"));Save->setShortcut(QKeySequence::Save);caidan->addAction(Save);Saveother =new QAction(this);Saveother ->setText("另存为");Saveother->setIcon(QIcon(":/pohto/textunder.png"));Saveother->setShortcut(QKeySequence::SaveAs);caidan->addAction(Saveother);Copy=new QAction(this); //创建一个copy行为,放到编辑菜单栏里面Copy ->setText("复制文本");Copy->setIcon(QIcon(":/pohto/copy.png"));Copy->setShortcut(QKeySequence::Copy);caidan1->addAction(Copy);Paste=new QAction(this); //创建一个Paste行为,放到编辑菜单栏里面Paste ->setText("粘贴文本");Paste->setIcon(QIcon(":/pohto/paste.png"));Paste->setShortcut(QKeySequence::Paste);caidan1->addAction(Paste);
三、初始化构造文本编辑框,消息标签提示行为
EWrite = new QTextEdit(this); 给当前界面实例化一个可写地方②
this->setCentralWidget(EWrite); 在该window平台自带的限定区域进行适配编辑框Newfile->setStatusTip("点我创建文件"); 给执行动作添加一个标签提示(左下角)③
open->setStatusTip("选中一个文件并打开显示在文本框");
Save->setStatusTip("保存目前修改的内容");
Saveother->setStatusTip("将写好的内容放置新文件");
Copy->setStatusTip("复制当前选中的文本");
Paste->setStatusTip("粘贴当前选中的文本");this->FileName=("无标题-文本框"); 初始化一个文件名④
this->setWindowTitle(this->FileName);将文件名放在程序窗口主题
四、初始化工具对象,同时将工具对象放至工具栏。同时给行为动作添加图标至工具栏
同时初始化状态标签
this->gongju->addAction(this->open); 在已经创建好的工具栏上加入Action的图标快捷方式⑤this->gongju->addAction(this->Save);this->gongju->addAction(this->Copy);pen =new QToolButton(this); 创建一个工具对象(字体)⑥this->pen->setIcon(QIcon(":/pohto/font.png")); 给对象上图标this->gongju->addWidget(pen); 添加到工具栏的,以方便其调用内容color=new QToolButton(this);this->color->setIcon(QIcon(":/pohto/color.png"));this->gongju->addWidget(color);notice = new QLabel("欢迎使用文浩笔记本",this);创建标签⑦statusBar()->addPermanentWidget(notice);把标签永久性打印在状态栏上(右下角)
五,开始构建菜单行为中的文件功能 ,类似这种

博主这边将提供一个打开文件与另存为的源文件,只要看懂了,其他的都能写出来
先来看打开文件源代码:
void MainWindow::openFileSlot()Action打开-槽函数功能,搜索当前路径,显示路径下的所有txt文档,选中并打开至文本框
{bool res = this->EWrite->document()->isModified(); 系统给定的内容,判定文本框内是否有文字变动if(res ==true){int ret = QMessageBox::question(this,"温馨提示","是否需要保存修改的内容?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);if(ret ==QMessageBox::Yes){this->SaveFile(); 保存功能 封装的 下面有详细this->Open1(); 正常打开不判断 封装的 下面有}else if(ret ==QMessageBox::No){this->Open1();}else if(ret ==QMessageBox::Cancel){return;}}else{this->Open1(); 文本未修改则直接打开}
}void MainWindow::Open1() //公有制函数 功能不判断文本框直接打开某一个文件
{this->FilePath = QFileDialog::getOpenFileName(this,"选择需要打开的文件",".","TXT(*.txt)"); //父对象|窗口名|搜索路径|搜索对象if(FilePath.isNull()) //此时的FilePath/是文件路径 具体为我们打开的文件路径{qDebug()<EWrite->setText(file.readAll()); //将读取的文件所有内容发送至编辑框中this->FileName = FileName; //赋值当前文件名至public区域的FIlename中,目的是为了更新主题名this->setWindowTitle(this->FileName); //把public区域的FIlename文件名改为自己的窗口主题file.close();
}
再来看另存为动作源代码:
void MainWindow::SaveAsFile()//Action另存为-槽函数功能,将文本框内容另存至新文件
{QString name =QFileDialog::getSaveFileName(this, "另存为", ".", "TXT(*.txt)"); //显示当前路径下的txt文件,返回点击的文件路径if(name.isNull()){qDebug()<FileName=fileInfo.fileName(); //用规定的操作将解析的文件名赋值到类的文件名中QFile file(name);//给文件权限,目的是操作绝对路径下的文件bool res=file.open(QIODevice::WriteOnly);if(res==false){return;}//获取文本框内容QString Temp= this->EWrite->toPlainText();// QByteArray arry;// arry.clear();//arry.append(str);// file.write(arry);file.write(Temp.toStdString().c_str());//将字符串转为计算机可识别的形式写入此文件内this->FilePath=name;this->setWindowTitle(this->FileName);file.close();
}
六,将行为进行信号与槽的链接(构造函数里写)
/⑧各种信号的链接connect(Copy,SIGNAL(triggered()),this->EWrite,SLOT(copy()));复制发送信号,随后进入编辑框自带的槽函数中实现复制connect(Paste,SIGNAL(triggered()),this->EWrite,SLOT(paste()));粘贴行为发送信号,随后进入编辑框自带的槽函数中实现粘贴connect(color,SIGNAL(clicked()),this,SLOT(ChangeColor()));选中字体点击颜色后,发送信号至改变颜色槽函数connect(pen,SIGNAL(clicked()),this,SLOT(ChangePen()));选中字体点击字体后,发送信号至改变字体格式槽函数connect(Newfile,SIGNAL(triggered()),this,SLOT(CreateFile()));当点击新建文件时,执行信号要求的函数。connect(open,SIGNAL(triggered()),this,SLOT(openFileSlot()));链接执行打开的操作,当发送打开文件操作时进行操作connect(Save,SIGNAL(triggered()),this,SLOT(SaveFile()));点击保存时,信号发送给执行保存的槽函数connect(Saveother,SIGNAL(triggered()),this,SLOT(SaveAsFile()));点击另存为时,信号发送给执行另存为的槽函数connect(this->EWrite,SIGNAL(textChanged()),this,SLOT(updateWindowTitle())); 文本框有变动时,发送信号给执行主题变更的槽函数
七,查看一下构建的头文件、数据成员、成员函数、构建槽函数
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include //菜单栏建立
#include
#include //动作栏
#include //工具栏
#include //状态栏
#include //菜单内容
#include //图标内容
#include //编辑框(核心区域)
#include //弹出来的绘画课
#include //解析绝对路径文件名
#include //操作文件
#include //打印异常地方
#include //找文件路径
#include //更改文本框中选择的内容格式
#include //工具内容
#include //更改文本框选择的内容颜色
#include //设定标签,将其放入状态栏namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECT
public:void ClearT();void Open1();public:explicit MainWindow(QWidget *parent = 0);~MainWindow();QTextEdit*EWrite; //实例化的能写的内容地方QMenuBar* chuangkou;//实例化的窗口对象QToolBar* gongju;//实例化的工具对象QStatusBar* zhuangtai;//实例化的状态对象QMenu* caidan; //窗口上面的内容1显示QMenu*caidan1; //窗口上面的内容2显示QMenu*caidan2; //窗口上面的内容2显示QAction * open;//打开操作(caidan内容1)QAction * Save;//保存操作(caidan内容1)QAction* Saveother;//另存为操作(caidan内容1)QAction *Copy; //工具栏的赋值粘贴功能QAction * Paste;//创建操作(caidan内容1)QAction * Newfile;//创建操作(caidan内容1)QString FileName; //定义获取的文件名QString FilePath;//文件路径QToolButton *pen;//工具栏的字体功能QToolButton *color;//工具栏的颜色功能QLabel *notice; //状态栏的消息提醒功能public slots:void CreateFile();void openFileSlot();//打开显示路径文件void SaveFile();//保存文件void SaveAsFile(); //另存为void updateWindowTitle();//更改窗口名字void ChangePen();//改变文本框字体格式void ChangeColor();//改变文本框字体颜色private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
--------------------------------------------我是分割线----------------------------------------------------------------
言而总之,记事本的功能实现很简单,看懂上面这些后无论去添加什么功能都能得心应手。对信号与槽的理解、对QT中界面的施加将更快速且便捷
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
