前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt项目NotePad设计

Qt项目NotePad设计

作者头像
DeROy
修改2020-08-19 10:58:16
1.5K0
修改2020-08-19 10:58:16
举报
文章被收录于专栏:编程学习基地

前言

待完成

正文

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

主界面预览

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

菜单栏和状态栏设计

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

设计中心窗口

QTabWidget
代码语言:javascript
复制
    QTabWidget *Tab;

实例化对象

代码语言:javascript
复制
    this->Tab = new QTabWidget(this);
    this->setCentralWidget(Tab);
    this->Tab->setMovable(true);        //设置页面是否可被拖拽移动.
    this->Tab->setTabsClosable(true);   //设置页面是否可以关闭
QTextEdit
代码语言:javascript
复制
QList<QTextEdit*> EditList;     /*  定义QList容器 */

实例化对象

代码语言:javascript
复制
QTextEdit *newEdit = new QTextEdit();
EditList.append(newEdit);               //将newEdit添加进List里面,方便管理
this->Tab->addTab(newEdit, filename);   //新建空白文件
QStatusBar
代码语言:javascript
复制
    QStatusBar *stbar;
    QLabel *lb_fileinfo;	//文件信息
    QLabel *lb_time;		//时间
    QLabel *lab_tmp;		//填充
    QLabel *lab_tmp1;		//填充

实例化对象

代码语言:javascript
复制
    //状态栏状态信息初始化
    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);

功能设计

新建文件

在这里插入图片描述

代码语言:javascript
复制
	QTextEdit *newEdit = new QTextEdit();

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

    this->ID++;     //id加一
    this->lb_fileinfo->setText(filename);	//设置状态栏信息
打开文件
代码语言:javascript
复制
    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();
保存文件
代码语言:javascript
复制
   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();
打开新窗口
代码语言:javascript
复制
	MainWindow* newWindow = new MainWindow;	//实例化自己
    newWindow->show();
打印文件

在这里插入图片描述

代码语言:javascript
复制
    //创建打印机对象
    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;
打印预览
定义槽函数
代码语言:javascript
复制
private slots:
    void printPreview(QPrinter *);
打印预览
代码语言:javascript
复制
/*    打印预览    */
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

在这里插入图片描述

代码语言:javascript
复制
    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对象统一设置字体

代码语言:javascript
复制
    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()<<"颜色设置失败";
    }
撤销 返回 复制 粘贴 剪贴 全选
代码语言:javascript
复制
QTextEdit::undo();   //撤销
QTextEdit::redo();   //返回
QTextEdit::copy();   //复制
QTextEdit::paste();  //粘贴
QTextEdit::cut();    //剪贴
QTextEdit::selectAll();  //全选
转CSDN
代码语言:javascript
复制
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】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程学习基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 主界面预览
    • 菜单栏和状态栏设计
      • 设计中心窗口
        • QTabWidget
        • QTextEdit
        • QStatusBar
      • 功能设计
        • 新建文件
        • 打开文件
        • 保存文件
        • 打开新窗口
        • 打印文件
        • 打印预览
        • 另存为PDF
        • 设置字体
        • 撤销 返回 复制 粘贴 剪贴 全选
        • 转CSDN
      • 参考文献
        • 源代码github地址:
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档