专栏首页编程学习基地Qt项目NotePad设计

Qt项目NotePad设计

前言

待完成

正文

目录
  • 主界面预览
    • 菜单栏和状态栏设计
    • 设计中心窗口
      • QTabWidget
      • QTextEdit
      • QStatusBar
    • 功能设计
      • 新建文件
      • 打开文件
      • 保存文件
      • 打开新窗口
      • 打印文件
      • 打印预览
        • 定义槽函数
        • 打印预览
      • 另存为PDF
      • 设置字体
      • 撤销 返回 复制 粘贴 剪贴 全选
      • 转CSDN
    • 参考文献

主界面预览

微信公众号【编程学习基地】后台发送关键字NotePad获取源码

菜单栏和状态栏设计

仿照记事本的菜单栏进行设计,利用利用Designer设计UI界面万能的UI设计方案

设计中心窗口

QTabWidget

    QTabWidget *Tab;

实例化对象

    this->Tab = new QTabWidget(this);
    this->setCentralWidget(Tab);
    this->Tab->setMovable(true);        //设置页面是否可被拖拽移动.
    this->Tab->setTabsClosable(true);   //设置页面是否可以关闭

QTextEdit

QList<QTextEdit*> EditList;     /*  定义QList容器 */

实例化对象

QTextEdit *newEdit = new QTextEdit();
EditList.append(newEdit);               //将newEdit添加进List里面,方便管理
this->Tab->addTab(newEdit, filename);   //新建空白文件

QStatusBar

    QStatusBar *stbar;
    QLabel *lb_fileinfo;	//文件信息
    QLabel *lb_time;		//时间
    QLabel *lab_tmp;		//填充
    QLabel *lab_tmp1;		//填充

实例化对象

    //状态栏状态信息初始化
    this->stbar = this->statusBar();
    this->lb_fileinfo = new QLabel();
    this->lb_time = new QLabel();
    this->lab_tmp = new QLabel("                          ");
    this->lab_tmp1 = new QLabel("                          ");
    //添加状态栏信息
    stbar->addWidget(lb_fileinfo);
    stbar->addWidget(lab_tmp);
    stbar->addWidget(lab_tmp1);
    stbar->addWidget(lb_time);

功能设计

新建文件

在这里插入图片描述

	QTextEdit *newEdit = new QTextEdit();

    this->Tab->addTab(newEdit, filename);   //新建空白文件
    this->Tab->setCurrentIndex(ID);         //设置当前Tab下标

    this->ID++;     //id加一
    this->lb_fileinfo->setText(filename);	//设置状态栏信息

打开文件

    QString openName;
    openName = QFileDialog::getOpenFileName(this, "打开文件", "");
    if(openName.isEmpty()){
        qDebug()<<"文件打开失败";
        return;
    }
    qDebug()<<"打开文件成功";

    QFile file(openName);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug()<<file.errorString();
        return;
    }
    //读取    解决打开文件中文乱码  没有完全解决utf-8没问题
    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        QString str = QString(line);                  //QString(line)  QByteArray转化为QString
        this->EditList.at(ID - 1)->append(str);
    }
    file.close();

保存文件

   QString saveFileName = QFileDialog::getSaveFileName(this, "保存",QString("%1.txt").arg(ID));
    if(saveFileName.isEmpty()){
        qDebug()<<"文件保存失败";
        return;
    }
    //进行写操作
    QString txt = this->EditList.at(this->Tab->currentIndex())->toPlainText();
    QFile file(saveFileName);
    file.open(QIODevice::WriteOnly|QIODevice::Text);
    file.write(txt.toUtf8());
    file.close();

打开新窗口

	MainWindow* newWindow = new MainWindow;	//实例化自己
    newWindow->show();

打印文件

在这里插入图片描述

    //创建打印机对象
    QPrinter printer (QPrinter::HighResolution);
    //打印机构造一个新的模态打印机对话框。
    QPrintDialog *dlg=new QPrintDialog(&printer,this);
    //如果选中文档 activeWindow为QTextEdit 声明的对象
    if(this->EditList.at(this->Tab->currentIndex())->textCursor().hasSelection())
    {
        dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
    }
    dlg->setWindowTitle(tr("打印文档"));
    if(dlg->exec()==QDialog::Accepted)
    {
        //便于将文本编辑文档打印到给定打印机的功能。这相当于直接在文档上调用print方法
        this->EditList.at(this->Tab->currentIndex())->print(&printer);
    }
    delete dlg;

打印预览

定义槽函数
private slots:
    void printPreview(QPrinter *);
打印预览
/*    打印预览    */
void MainWindow::on_action_PrintPreview_triggered()
{
    QPrinter printer(QPrinter::HighResolution);
    QPrintPreviewDialog preview(&printer, this);
    connect(&preview, SIGNAL(paintRequested(QPrinter*)), this,SLOT(printPreview(QPrinter*)));
    preview.exec();
}

/*    预览槽函数    */
void MainWindow::printPreview(QPrinter *printer)
{
    this->EditList.at(this->Tab->currentIndex())->print(printer);
}

另存为PDF

在这里插入图片描述

    QString saveFileName = QFileDialog::getSaveFileName(this, "另存为PDF",QString("%1.pdf").arg(ID));
    if(saveFileName.isEmpty()){
        qDebug()<<"文件保存失败";
        return;
    }

    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(saveFileName);
    this->EditList.at(this->Tab->currentIndex())->document()->print(&printer);

设置字体

在这里插入图片描述

给所有QTextEdit对象统一设置字体

    bool ok;
    QFont font = QFontDialog::getFont(&ok, QFont("Consolas", 12), this);
    if (ok) {
        for(int i=0;i<EditList.size();i++)
        {
            EditList.at(i)->setFont(font);
        }
        qDebug()<<"成功设置颜色";
    } else {
        qDebug()<<"颜色设置失败";
    }

撤销 返回 复制 粘贴 剪贴 全选

QTextEdit::undo();   //撤销
QTextEdit::redo();   //返回
QTextEdit::copy();   //复制
QTextEdit::paste();  //粘贴
QTextEdit::cut();    //剪贴
QTextEdit::selectAll();  //全选

转CSDN

QDesktopServices::openUrl(QUrl(QLatin1String("https://blog.csdn.net/qq_44519484")));

参考文献

[1] Qt官方示例application

[2]Qt官方示例syntaxhighlighter

源代码github地址:

https://github.com/ADeRoy/Qt_Demo.git

关键字【NotePad】

本文分享自微信公众号 - 编程学习基地(LearnBase),作者:DeRoy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Qt附加工具--多语言国际化

    Qt Assistant是可配置且可重新发布的文档阅读器,可以方便地进行定制并与Qt应用程序一起重新发布。Qt Assistant已经被整合进Qt Creato...

    DeROy
  • Qt介绍及环境搭建

    Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt Softwar...

    DeROy
  • Qt项目网络聊天室设计

    3. 服务器接收到某个客户端的请求以及发送信息,经服务器发给其它客户端 最终实现一个共享聊天内容的聊天室!

    DeROy
  • 重新撸一遍javascript (三)

    lilugirl
  • 如何写出优雅的 JS 代码?使用 SOLID 原则

    把这六个原则的首字母联合起来(两个 L 算做一个)就是 SOLID (solid,稳定的),其代表的含义就是这六个原则结合使用的好处:建立稳定、灵活、健壮的设计...

    前端小智@大迁世界
  • 竟然可以用 effect 玩水?Cocos Creator 3D !

    最近逛论坛时,看到一位大佬在分享各种 shader 特效。基于其中的水波 shader ,白玉无冰写了一个玩水效果!文章底部获取完整代码!还可以试试水哦!

    白玉无冰
  • 浅谈前端响应式设计(一)

    现实世界有很多是以响应式的方式运作的,例如我们会在收到他人的提问,然后做出响应,给出相应的回答。在开发过程中我也应用了大量的响应式设计,积累了一些经验,希望能抛...

    有赞coder
  • vue项目使用 富文本 封装

    我又来了,今天给大家分享一个富文本框的封装,写后台管理也离不开富文本框,我就做了封装,供大家参考,

    前端小白@阿强
  • 基础篇章:关于 React Native 之 Modal 组件的讲解

    (友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) Modal是模态视图,它的作用是可以用来覆盖...

    非著名程序员
  • React Async Rendering

    React放出Fiber(2017/09/26发布的v16.0.0带上去的)到现在已经快1年了,到目前(2018/06/13发布的v16.4.1)为止,最核心的...

    ayqy贾杰

扫码关注云+社区

领取腾讯云代金券