9.19 QT作业

news2024/10/6 15:27:28

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

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QFontDialog>            //字体对话框
#include<QFont>                   //字体类
#include<QMessageBox>               //消息对话框
#include<QDebug>                    //信息调试类
#include<QColorDialog>              //颜色对话框
#include<QColor>                     //颜色类
#include<QFileDialog>                //文件对话框类
#include<QFile>                      //文件头文件


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:

    void on_fontbtn_clicked();

    void on_colorbtn_clicked();

    void on_openbtn_clicked();

    void on_savebtn_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

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

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

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




void Widget::on_fontbtn_clicked()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok,
                                   QFont("宋体",10,10,false),
                                   this,
                                   "选择字体");
    if(ok)
    {
        ui->textEdit->setCurrentFont(f);
    }
    else
    {
        QMessageBox::information(this,"取消","用户取消字体");
    }
}

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

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

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

void Widget::on_openbtn_clicked()
{
    QString filename = QFileDialog::getOpenFileName(this,
                                                    "选择文件",
                                                    "./",
                                                    "all(*.*)");
    if(filename.isNull())
    {
        QMessageBox::information(this,"取消","用户取消选择文件");
    }
    else
    {
        qDebug()<<filename;
        QFile file(filename);
        if(!file.isOpen())
        {
            if(!file.open(QFile::ReadWrite))
            {
                QMessageBox::critical(this,"失败","文件打开失败");
            }
        }

        QByteArray msg = file.readAll();

        file.close();

        ui->textEdit->setText(msg);
    }
}

void Widget::on_savebtn_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this, "保存文件", "./", "All(*.*)");

    if(fileName.isNull())
    {
        QMessageBox::information(this, "取消", "用户取消选中");
    }
    else
    {
        QFile file(fileName);
        if(file.exists())
        {

            file.remove();
        }
        if(!file.open(QIODevice::WriteOnly))
        {
            QMessageBox::critical(this, "错误", "文件打开失败");
            return;
        }
        else
        {
            std::string s1 = ui->textEdit->toPlainText().toStdString();
            const char *text = s1.c_str();
            if(-1 == file.write(text))
            {
                QMessageBox::critical(this, "错误", "文件写入失败");
            }else
            {
                QMessageBox::information(this, "成功", "文件写入成功");
            }

            file.close();



        }
    }
}

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QObject>
#include<QTimerEvent>             //定时器事件处理类
#include<QTime>
#include<QLabel>
#include<QTextToSpeech>
#include<QTextEdit>
#include<QLineEdit>

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;         //定时器事件处理函数

signals:
     void my_sign();


private slots:
     void qidong_clicked();
     void tingzhi_clicked();

private:
    Ui::Widget *ui;

     int timer_id;             //定时器的id号


     QLabel *lab1;
     QLineEdit *edit1;
     QTextEdit *edit2;
     QTextToSpeech *speencher;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<iostream>
#include<QObject>
#include<QDebug>
#include<QPushButton>
#include<QLineEdit>
#include<QLabel>
#include<QTextEdit>
#include<QTimerEvent>             //定时器事件处理类
#include<QTime>


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

    QPushButton *btn1 = new QPushButton;  //设置按钮1
    btn1->setParent(this);
    btn1->setText("启动");                 //定义按钮内容
    btn1->resize(100,50);                 //设置按钮大小
    btn1->move(400,200);                    //移动按钮位置

    QPushButton *btn2 = new QPushButton;  //设置按钮2
    btn2->setParent(this);
    btn2->setText("停止");                 //定义按钮内容
    btn2->resize(100,50);                 //设置按钮大小
    btn2->move(600,200);

    lab1 = new QLabel(this);            //设置标签
    lab1->resize(100,50);
    lab1->setStyleSheet("background-color:yellow;");
    //lab1->setText("");

    edit1 = new QLineEdit(this);
    edit1->resize(300,75);         //设置行编辑器大小
    edit1->move(400,80);          //移动行编辑器
    edit1->setText(QString());


    edit2 = new QTextEdit(this);
    edit2->resize(400,300);
    edit2->move(200,300);
    edit2->setText(QString("南华城里月如昼\n十二玉楼非吾乡"));

    speencher = new QTextToSpeech(this);

    connect(btn1, &QPushButton::clicked, this, &Widget::qidong_clicked);
    connect(btn2, &QPushButton::clicked, this, &Widget::tingzhi_clicked);


}

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


//启动定时器按钮对应的槽函数
void Widget::qidong_clicked()
{
    timer_id = this->startTimer(1000);
    //功能:启动一个定时器

}


//关闭定时器按钮对应的槽函数
void Widget::tingzhi_clicked()
{
    this->killTimer(timer_id);           //关闭给定的定时器
}


//定时器事件处理函数
void Widget::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timer_id)         //说明定时器1到位
    {
        QTime sys_t = QTime::currentTime();          //获取系统时间
        //将QTime类对象转换为字符串
        QString t = sys_t.toString("hh:mm:ss");


        //展示到ui界面
       lab1->setText(t);

        if(t == edit1->text())
        {
            speencher->say(edit2->toPlainText());
            qDebug()<<edit2->toPlainText();
        }
    }
}

main.cpp
 

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

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

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

相关文章

使用git config --global设置用户名和邮件,以及git config的全局和局部配置

文章目录 1. 文章引言2. 全局配置2.1 命令方式2.2 配置文件方式 3. 局部配置3.1 命令方式3.2 配置文件方式 4. 总结 1. 文章引言 我们为什么要设置设置用户名和邮件&#xff1f; 我们在注册github&#xff0c;gitlab等时&#xff0c;一般使用用户名或邮箱&#xff1a; 这个用户…

csgo盲盒支付接口如何申请?

csgo盲盒支付接口如何申请&#xff1f;个人认为没什么特别难懂的&#xff01; 第一点&#xff1a;确定网站的基本功能&#xff01;每个网站的玩法大概都是一样的&#xff0c;无非是拆箱盲盒&#xff0c;ROLL房间、决斗、货物、生存和更换合同&#xff0c;然后有积分购物中心&am…

systemd Linux 发行版 antiX推出antiX 23 发布

导读基于 Debian “稳定 “分支的无 systemd Linux 发行版 antiX 的开发人员宣布推出 antiX 23。 这是该项目基于 Debian 12 的第一个版本&#xff1a;”antiX 23 ‘Arditi del Popolo’是基于 Debian ‘书虫’的新版本。 像往常一样&#xff0c;我们为 32 位和 64 位架构提供…

485modbus转profinet网关在混料配料输送系统应用博图配置案例

PLC作为一个可编程的控制器&#xff0c;通过与兴达易控modbus转profinet网关&#xff08;XD-MDPN100&#xff09;之间的通信&#xff0c;将控制命令传递给变频器&#xff0c;实现对其速度和转动方向等参数的调节。同时&#xff0c;PLC还能够接收来自称重仪表的称重数值&#xf…

学习路之工具--SecureCRT的下载、安装

百度盘&#xff1a; 链接: https://pan.baidu.com/s/1r3HjEj053cKys54DTqLM4A?pwdgcac 提取码: gcac 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 感谢大佬 简单介绍下SecureCRT SecureCRT是一款支持SSH&#xff08;SSH1和SSH2&#xff09;的终端仿真程序&a…

JavaScript代理模式

JavaScript代理模式 1 什么是代理模式2 实现一个简单的代理模式3 保护代理和虚拟代理4 虚拟代理实现图片预加载5 虚拟代理合并HTTP请求6 缓存代理 1 什么是代理模式 代理模式是为一个对象提供一个代用品或占位符&#xff0c;以便控制对它的访问。 代理模式的关键是&#xff0…

LCR 164.破解闯关密码(数字---字符)

目录 一、题目 二、解答 一、题目 LCR 164. 破解闯关密码 - 力扣&#xff08;LeetCode&#xff09; 二、解答 std::stoi 返回的是一个 int 类型的整数。std::stoull 返回的是一个 unsigned long long 类型的整数&#xff08;无符号长整数&#xff09; class Solution { pub…

unity gb28181 rtsp 视频孪生图像拉流和矫正插件(一)

目的是为了视频孪生&#xff0c;将视频放到三维里面&#xff0c;如果使用自己写的插件&#xff0c;有更好的灵活性&#xff0c;同时断线重连等等都更好控制了。 1、矫正算法和硬件解码 最好使用opencv制作&#xff0c;可以使用opencv的cuda加速&#xff0c;opencv的编译&…

【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1(HiDataPlus)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

图像练习-矩形4点OpenCV(01)

提取出里面最大矩形的四个顶点坐标 源图像 结果展示 代码 void getLine(std::vector<int>& data, int threshold) {for (int x 0; x < data.size(); x){if (0 data[x]){continue;}int maxValue 0, maxLoc -1, i -1;for (i x; i < data.size(); i){if …

普通货架智能改造

系统架构 普通货架亮灯改造 普通货架亮灯改造可以选用&#xff0c;铝合金多色灯条和电子标签&#xff0c;两种形式进行货架智能亮灯改造&#xff1b;其差别在于铝合金多色灯条亮灯改造后&#xff0c;只适用于手持终端扫描校验灭灯&#xff1b;电子标签则可以支持手动确认拍灭…

分布式运用之企业级日志ELFK+logstash的过滤模块

一、ELFK集群部署&#xff08;FilebeatELK&#xff09; 在搭建ELK的基础上安装Filebeat服务&#xff0c;Filebeat服务可以布置在以下任意一台主机&#xff0c;本次实验将布置在apache服务器的节点上 步骤一&#xff1a;安装 Filebeat&#xff08;在apache节点操作&#xff09…

渲染路径RenderingPath

文章目录 前言一、什么是渲染路径二、渲染路径有哪些1、前向渲染路径2、延迟渲染路径3、顶点照明渲染路径(已过时)4、旧的渲染路径&#xff08;已过时&#xff09; 前言 渲染路径RenderingPath 一、什么是渲染路径 为进行光照计算而设计的渲染方式 二、渲染路径有哪些 1、前向…

虹科案例 | ELPRO帮助客户实现符合GDP标准的温度监测和高效的温度数据管理

文章来源&#xff1a;虹科环境监测技术 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/wwIPx_GK3ywqWr5BABC4KQ 在本案例研究中&#xff0c;虹科ELPRO帮助客户 ● 实施了温度监测解决方案&#xff0c;以一致的数据结构获取各国和各种运输方式的数据; ● 通过将温度数据上…

华为OD机试 - 快递运输 - 送分题(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、题目描述2、大白话分析 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题…

邓俊辉《数据结构》→ “2.6.5 二分查找(版本A)”之“成功查找长度”递推式推导

【问题描述】 邓俊辉的《数据结构&#xff08;C语言版&#xff09;&#xff08;第3版&#xff09;》&#xff08;ISBN&#xff1a;9787302330646&#xff09;中&#xff0c;开始于第48页的“2.6.5 二分查找&#xff08;版本A&#xff09;”内容在第50页详述了“成功查找长度”的…

敏捷在建设项目中的应用

敏捷这个概念天然地和软件开发密不可分&#xff0c;因为在2001年由17位软件业的管理大师聚在一起举办一场具有历史里程碑意义的大会&#xff0c;确定了敏捷软件开发宣言和敏捷原则&#xff0c;软件开发就是敏捷的起源之地。 钱亮老师在ShineScrum捷行举办的第五届敏捷论坛&…

vue项目打包部署到服务器,报错。

这个是因为后端部署服务器时&#xff0c;名称没有对上&#xff0c;不是前端的问题&#xff0c;后端配置名称和前端的包名称保持一致就可以了。

pve虚拟lxc安装docker教程

目录 &#xff08;一&#xff09;前提1. 存在的问题2. 解决办法 &#xff08;二&#xff09;安装lxc系统1. 环境2. 镜像3. 安装流程 &#xff08;三&#xff09;ubuntu安装docker1. 不同版本docker介绍&#xff1a;2. 安装docker-ce3. 安装青龙4. 青龙的卸载更新 &#xff08;四…

9.23统计学金融学(第一部分)

泊松分布 某事件在特定时间或空间中发生的次数。比如一天内中奖的个数&#xff0c;一个月内某机器损坏的次数等。 泊松概率的成立条件是在任意两个长度相等的区间中&#xff0c;时间发生的概率是相同的&#xff0c;并且事件是否发生都是相互独立的。 泊松概率既然表示事件在…