Qt项目--NotePad设计

12 篇文章 8 订阅

主界面预览

微信公众号【编程学习基地】后台发送关键字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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeRoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值