2023年9月19日

news2024/12/26 9:21:59

2> 完成文本编辑器的保存工作

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QFontDialog>
#include <QMainWindow>
#include <QFont>
#include <QMessageBox>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFileDialog>
#include <QFile>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_fontbtn_clicked();

    void on_colorbtn_clicked();

    void on_openbtn_clicked();

    void on_savebtn_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//字体按钮对应的槽
void MainWindow::on_fontbtn_clicked()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok,
                         QFont("隶书",10,10,false),
                         this,
                         "选择字体");

    if(ok)
    {
        //ui->textEdit->setFont(f);
        ui->textEdit->setCurrentFont(f);
    }else
    {
        QMessageBox::information(this,
                                 "取消",
                                 "用户取消选择字体");
    }
}

void MainWindow::on_colorbtn_clicked()
{
    QColor c = QColorDialog::getColor(QColor("yellow"),
                                      this,
                                      "选择颜色");

    if(c.isValid())
    {
        ui->textEdit->setTextColor(c);

    }else
    {
        QMessageBox::information(this,
                                 "取消",
                                 "用户取消了选择颜色");
    }
}

void MainWindow::on_openbtn_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                                                    "选择文件",
                                                    "./",
                                                    "All(*.*);;Image (*.png *.xpm *.hpg);;Text (*.txt)");

    if(fileName.isNull())
    {
        QMessageBox::information(this,"提示","用户取消了选择文件");
        return ;
    }

    qDebug()<<fileName;

    QFile file(fileName);
    if(!file.isOpen())
    {
        if(!file.open(QFile::ReadWrite))
        {
            QMessageBox::critical(this,"失败","文件打开失败");
            return;
        }
    }

    QByteArray msg = file.readAll();

    file.close();

    ui->textEdit->setText(msg);

}

void MainWindow::on_savebtn_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this,
                                                    "文件另存为",
                                                    "./",
                                                    "All(*.*);;Image (*.png *.xpm *.hpg);;Text (*.txt)");
    if(fileName.isNull())
    {
        QMessageBox::information(this,"提示","用户取消了保存文件");
        return ;
    }

    qDebug()<<fileName;

    QFile file(fileName);
    if(file.open(QFile::ReadWrite))
    {
        QByteArray msg = file.readAll();
        msg=ui->textEdit->toPlainText().toLocal8Bit();
        file.write(msg);
    }else
    {
        QMessageBox::information(this,"提示","文件另存为失败");
    }

}

3>

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>
#include <QTime>
#include <QTimer>
#include <QPushButton>
#include <QtTextToSpeech/QTextToSpeech>
#include <QVoice>
#include <QMessageBox>
#include <QElapsedTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    //时钟函数
    void timerEvent(QTimerEvent *e) override;

private:
    Ui::Widget *ui;
    QTimer *timer;
    int time_id;
    QTextToSpeech *speech = new QTextToSpeech(this);


private slots:
    //确定按钮
    void on_pushButton_clicked();

    //计时器事件函数
    void on_timer_timeout();

    //取消按钮
    void on_pushButton_2_clicked();
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->timer=new QTimer;

    //0.1s检查一次
    time_id=startTimer(100);

     //连接定时器信号和自定义的槽函数
     connect(timer,&QTimer::timeout,this,&Widget::on_timer_timeout);

}

Widget::~Widget()
{
    delete ui;
}

//启动按钮
void Widget::on_pushButton_clicked()
{
    timer->start(100);
    ui->textEdit->setReadOnly(true);
    ui->lineEdit->setReadOnly(true);
}

//计时器函数
void Widget::on_timer_timeout()
{
    if(ui->lineEdit->text()==ui->label->text())
    {
        //播报员
        speech = new QTextToSpeech(this);
        QString text = ui->textEdit->toPlainText();
        speech->say(text);
    }
}

//时钟
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==time_id)
    {
    QDateTime sysDateTime=QDateTime::currentDateTime();
    QString dateTime=sysDateTime.toString("hh:mm:ss");
    ui->label->setText(dateTime);
    }
}

//停止
void Widget::on_pushButton_2_clicked()
{
    QMessageBox box(QMessageBox::Warning,"Warning","是否要重设闹钟",QMessageBox::Yes|QMessageBox::No);
           int ret = box.exec();
           if(ret==QMessageBox::Yes)
           {
               //关闭定时器
               timer->stop();
               //定时器关闭后行编辑器和文本编辑器重新有效
               ui->textEdit->setReadOnly(false);
               ui->lineEdit->setReadOnly(false);
               //清空之前设置的行文本编辑器
               ui->lineEdit->clear();
               speech->stop();
           }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask框架-1-[群聊]: flask-socketio实现websocket的功能

一、项目结构 flask_websocket |---static |---js |---jquery-3.7.0.min.js |---socket.io_4.3.1.js |---templates |---home |---group_chat.html |---index.html |---app.py 1.1、python环境 python3.9.0 1.2、依赖包 Flask2.1.0 eventlet0.33.3 Flask-SocketIO5.3.4 1.…

温习JAVA

1.时间 作业题&#xff1a; 1.子串在字符串中出现的次数 import java.util.Scanner;/*** 分别在控制台输⼊字符串和⼦字符* 串&#xff0c;并计算字符串中⼦字符串出现的* 次数。indexOf(subs,n)*/ public class H5 {public static void main(String[] args) {Scanner scnew …

linux搭建单机ES,集成ik分词器,文本抽取,Kibana可视化平台

Elasticsearch单机&#xff08;Linux&#xff09; 准备工作 第一项&#xff1a; 创建运行Elasticsearch和Kibana专用的普通用户&#xff0c;因为 elasticsearch 和 kibana 不允许使用 root用户启动&#xff0c;所以需要创建新用户启动。 linux用root权限创建一个用户赋权即可…

BootStrap中的布局

1.BootStrap中的布局 2.BootStrap 中的媒体查询 // Extra small devices (portrait phones, less than 576px) media (max-width: 575px) { ... }// Small devices (landscape phones, 576px and up) media (min-width: 576px) and (max-width: 767px) { ... }// Medium dev…

38 | 统一测试数据平台

测试数据准备的 2.0 时代 在Java中可以利用Builder Pattern&#xff0c;创建数据时如对其中的某个或某几个参数有特定要求的话&#xff0c;可以通过“.withParameter()”的方式指定&#xff0c;而没有指定的参数将自动采用默认值。 UserBuilder.withCountry(“US”).withBuild…

深度学习-ONNX模型

ONNX&#xff08;Open Neural Network Exchange&#xff09;是一种开放的、跨平台的模型交换格式&#xff0c;旨在帮助机器学习开发人员轻松地在不同的深度学习框架之间共享模型。 ONNX是由Microsoft和Facebook合作推出的&#xff0c;它使得不同深度学习框架之间可以相互转换模…

036:vue导出页面生成pdf文件

第036个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

Git:利用Git进行多人协作的场景模拟

文章目录 场景一场景二解决一些后续问题 场景一 Git是一个多人协作下完成的操作&#xff0c;因此Git是需要进行一些多人协作的场景的&#xff0c;那么这里就使用Linux和Windows两个平台进行模拟实现两个用户进行的协作 首先把仓库克隆到本地&#xff0c;再加入两个用户的信息…

软件设计模式系列之十——组合模式

1 模式的定义 组合模式是一种结构型设计模式&#xff0c;用于将对象组合成树形结构以表示部分-整体层次结构。这个模式允许客户端以一致的方式处理单个对象和对象组合&#xff0c;因此它将单个对象和组合对象视为可互换的。 组合模式允许你将对象组合成树状结构来表示"部…

AI写作宝-为什么要使用写作宝

写作一直是一项需要创造力和思考的任务&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐成为我们写作过程中的一位新伙伴。AI写作宝等在线AI写作工具正日益普及&#xff0c;为我们提供了更多的写作选择和可能性。 AI写作宝&#xff1a;什么是它们&#xff0c;以及它们能做…

国庆节都有哪些营销方案?

这里分享一些撰写国庆节营销方案的方法论&#xff0c;同时分享一些常见的国庆节营销方式。 1、确定活动时间&#xff1a; 一般来讲&#xff0c;国庆活动的最好时间是9月29日-10月7日&#xff0c;前期需要留有预热宣传的时间&#xff0c;告知用户活动的主题以及福利政策 2、确…

媒体发稿的步骤与技巧:打造品牌曝光与声誉

媒体发稿是企业、组织和个人获取曝光和传播信息的重要途径之一。通过媒体发稿&#xff0c;可以向目标受众传递重要的信息、推广产品或服务、塑造品牌形象等。然而&#xff0c;对于许多人来说&#xff0c;媒体发稿的流程和步骤可能会感到复杂和困惑。本文将为您介绍媒体发稿的基…

怒刷LeetCode的第7天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;二分贪心 方法二&#xff1a;二分DP 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;双指针 方法二&#xff1a;暴力搜索 方法三&#xff1a;排序 第三题 题目来源 题目内容 解决方法 方法一…

【算法】单调栈

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

“高级Java注解的简介及应用“

目录 引言1. Java注解简介1.1 什么是注解1.2 注解的作用1.3 常见的Java注解 2. 自定义注解案例3. AOP自定义注解的应用3.1 AOP简介3.2 AOP自定义注解 总结 引言 在Java开发中&#xff0c;注解是一种非常重要的语言特性&#xff0c;它们可以为代码提供额外的信息和元数据。本文…

MFC 绘图

效果图&#xff1a;三张bmp图 字 竖线 组成 在OnPaint()函数中 CPaintDC dc(this);CRect rect;GetClientRect(&rect); //获取客户区矩形CDC dcBmp; //定义并创建一个内存设备环境dcBmp.CreateCompatibleDC(&dc); //创建兼容性DCCBitmap …

如何把利用paddlepaddle导出的json文件转化为yolo或者voc文件

目录 1. 修改源码&#xff0c;让模型能够生成出对于单个图像的标注。 2. 把数据转为yolo格式 3.把yolo格式转化为xml格式 这两天想偷懒&#xff0c;想让模型先在数据上标一遍&#xff0c;然后我再做修正&#xff0c;主要是图个省事。由于我们主要是利用paddle,模型也是基于p…

python+django学习资料在线分享系统vue

本站是一个B/S模式系统&#xff0c;采用vue框架作为开发技术&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得校园资料分享平台管理工作系统化、规范化。技术栈 后端&#xff1a;pyth…

同城信息服务源码 本地生活服务小程序源码

同城信息服务源码 本地生活服务小程序源码 功能介绍&#xff1a; 基本设置&#xff1a;网站参数、安全设置、分站管理、支付设置、操作日志、地区设置、公交地铁、国际区号、清理缓存、模板风格、模块管理、域名管理、底部菜单、消息通知、登录设置 其他设置&#xff1a;关键…

Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现

Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现 文章目录 Linux内核源码分析 (B.7)深入理解 slab cache 内存分配全链路实现1\. slab cache 如何分配内存2\. slab cache 的快速分配路径3\. slab cache 的慢速分配路径3.1 从本地 cpu 缓存 partial 列表中分配3…