Qt项目NotePad设计

2020-08-19 10:58:16 浏览数 (1)

前言

待完成

正文

目录
  • 主界面预览
    • 菜单栏和状态栏设计
    • 设计中心窗口
      • 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】

0 人点赞