Cpp/Qt-day030919Qt

news2024/12/27 11:39:05

目录

完成文本编辑器的保存工作
头文件: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>
#include <cstring>
#include <iostream>


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.c:
#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;    //返回用户是否选中字体
    //直接调用getFont获取一个字体对话框
    QFont f = QFontDialog::getFont(&ok, //返回是否选择字体
                         QFont("隶书", 10, 10, false),    //初始字体
                         this,      //父组件
                         "选择字体");   //标题
    //对ok进行判断,判断用户是否选中字体了
    if(ok){
        //用户选中字体了,可以使用该字体
        //将选中的字体设置到文本文字上
        //ui->textEdit->setFont(f);     //设置所有文字的字体
        ui->textEdit->setCurrentFont(f);    //设置选中的字体
        //ui->textEdit->setFontItalic(true);  //设置字体倾斜
    }else{
        //用户取消选中字体,
        QMessageBox::information(this, "取消", "用户取消选择字体");
    }
}

void Widget::on_colorBtn_clicked()
{
    QColor c = QColorDialog::getColor(QColor("green"),  //初始颜色
                                      this,     //父组件
                                      "选择颜色");  //标题
    //判断c是否合法
    if(c.isValid()){
        //用户选择的颜色
        //将用户选择的颜色作用到文本上
        //ui->textEdit->setTextColor(c);        //设置字体颜色
        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;
        //得到文件路径

        //文件操作
        //1.实例化文件对象
        QFile file(fileName);

        //2.打开文件
        if(!file.isOpen()){
            //如果该文件没有被打开就打开
            //调用打开文件操作
            if(!file.open(QFile::ReadWrite)){
                //文件打开失败
                QMessageBox::critical(this, "失败", "文件打开失败");
                return;
            }
        }

        //3.文件读写
        QByteArray msg = file.readAll();

        //4.关闭文件
        file.close();

        //5.将读取的文本展示在ui界面
        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();


        }
    }
}
运行结果

2.

头文件:widget.h:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>
#include <QTime>
#include <QVoice>
#include <QTextToSpeech>


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 slots:
    void on_startBtn_clicked();

    void on_stopBtn_clicked();

private:
    Ui::Widget *ui;

    int timerId1;
    int timerId2;

    //定义一个播报员
    QTextToSpeech *speencher;
};
#endif // WIDGET_H
源文件:widget.c:
#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

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

    //默认启动一个定时器,显示当前时间
    timerId1 = this->startTimer(1000);
    //给播报员实例化空间
    speencher = new QTextToSpeech(this);
}

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


void Widget::on_startBtn_clicked()
{
    //启动一个定时器
    timerId2 = this->startTimer(1000);
    //播报
    speencher->say(ui->textEdit->toPlainText());
}

//定时器事件处理函数
void Widget::timerEvent(QTimerEvent *e){
    if(e->timerId() == timerId1){
        //说明定时器1到位,处理对应的任务
        QTime sys_t = QTime::currentTime();     //返回获取系统的时间
        //将QTime类型对象转换为字符串
        QString t = sys_t.toString("hh:mm:ss");
        ui->label->setText(t);
    }else if(e->timerId() == timerId2){
        //这是闹钟功能的定时器
        //获取返回的系统时间
        QTime sys_t = QTime::currentTime();
        //将QTime类型对象转换为字符串
        QString t = sys_t.toString("hh:mm:ss");
        //qDebug()<<ui->lineEdit->text();
        if(ui->lineEdit->text() == t){
            //当输入的时间与系统时间相同时,进行语音播报textlabel中的内容
            //播报
            speencher->say(ui->textEdit->toPlainText());
            //由于语音播报无法在截图中显示,所以,另加一个debug展示效果
            qDebug()<<ui->textEdit->toPlainText();
        }
    }
}
void Widget::on_stopBtn_clicked()
{
    //暂停闹钟的定时器
    this->killTimer(timerId2);
}
运行结果:

思维导图

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

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

相关文章

Vue的详细教程--基础语法【上】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Vue的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.插值 1.文本 2.html 3.属性&class绑…

Blender关键帧动画简明教程

Blender 3D 是一款能够创建令人惊叹的动画的免费软件。 Blender 中的大多数动画都使用所谓的关键帧。 Blender 中关键帧的介绍将涵盖开始制作动画所需的一切&#xff01; 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、什么是关键帧&#xff1f; 在计算机出现之前&a…

玩玩“小藤”开发者套件 Atlas 200I DK A2 之挂载 m2 硬盘

玩玩“小藤”开发者套件 Atlas 200I DK A2 之挂载 m2 硬盘 0. 背景1. 列出所有可用块设备的信息2. 格式化磁盘3. 创建 XFS 文件系统4. 挂载格式化的卷 0. 背景 总所周知&#xff0c;英伟达的GPU供不应求&#xff0c;还各种限制。华为推出了升腾AI可以提供AI算力&#xff0c;那…

【pytest】 标记冒烟用例 @pytest.mark.smoke

1. 使用 pytest.mark.smoke 标记用例 import pytest class Test_Smoke:def test_01(self):assert 112pytest.mark.smokedef test_02(self):assert 121pytest.mark.smokedef test_03(self):assert 1 2 3 2.配置文件pytest.ini [pytest] markers smoke 3. 运行指定标签 运…

从李佳琦到背后的商业逻辑再到游戏行业

引言 前阵子&#xff0c;李佳琦在直播间带货某牌子的眉笔时&#xff0c;被网友质疑越来越贵&#xff0c;对此李佳琦回应表示&#xff0c;79的眉笔不贵&#xff0c;国货品牌很难的&#xff0c;买不起的话&#xff0c;要找找自己的原因并反思这么多年有没有涨工资&#xff0c;有…

保存在本地的程序被删除了,咋恢复~

我在项目上&#xff0c;习惯在本地写一些工具代码。 大部分都是复制粘贴过来改吧改吧。 前段时间清理本地乱七八糟的程序&#xff0c;删了很多&#xff0c;当输入zlm**某个tcode后&#xff0c;提示没有&#xff0c;我擦发现&#xff0c;误删了~~ 好吧&#xff0c;难道只能重写&…

HTB靶机064-Arctic-WP

Arctic windows easy IP :10.10.10.11 端口扫描 简易端口扫描 ┌──(xavier㉿kali)-[~/Desktop/HTB/064-Arctic] └─$ sudo nmap -F 10.10.10.11 -T4 Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-13 23:30 CST Nmap scan report for 10…

力扣 -- 394. 字符串解码

解题方法&#xff1a; 参考代码&#xff1a; class Solution{ public:string decodeString(string s){stack<string> sst;stack<int> dst;//防止字符串栈为空的时候再追加字符串到栈顶元素sst.push("");int n s.size();int i 0;while(i<n)//最好不…

JUC第四讲:Java中的锁

Java提供了种类丰富的锁&#xff0c;每种锁因其特性的不同&#xff0c;在适当的场景下能够展现出非常高的效率。本文是JUC第4讲&#xff0c;旨在对锁相关源码&#xff08;本文中的源码来自JDK 8和Netty 3.10.6&#xff09;、使用场景进行举例&#xff0c;为读者介绍主流锁的知识…

ROBOGUIDE教程:三维模型创建功能介绍与操作方法

目录 概述 模型创建方法 模型属性设置 其他类型模型创建 资源文件夹创建 安全围栏模型创建 概述 ROBOGUIDE软件除了可以从外部导入模型外&#xff0c;软件自身也可以创建一些简易的三维模型&#xff0c;在对FANUC机器人虚拟仿真或离线编程时&#xff0c;可以利用这个功能…

SOLIDWORKS Composer反转关键帧实现产品安装过程

SOLIDWORKS Composer 是一款被用来制作交互式产品说明书的工具&#xff0c;可以帮助我们对产品设定精确的机构动画&#xff0c;并能根据材质生成一定细节的渲染图像。 今天我们主要向大家讲解的是&#xff0c;利用SOLIDWORKS Composer关键帧反转实现产品动态的安装。 一般情况下…

springcloud3 分布式事务解决方案seata之SAGA模式7

一 saga模式 1.1 saga Saga模式是SEATA提供的长事务解决方案&#xff0c;在Saga模式中&#xff0c;业务流程中每个参与者都提交本地事务&#xff0c;当出现某一个参与者失败则补偿前面已经成功的参与者&#xff0c;一阶段正向服务和二阶段补偿服务都由业务开发实现。 分布式…

VmWare16+Ubuntu安装教程

文章目录 前言一、前期软件和系统镜像准备二、VmWare16安装三、Ubuntu安装&#xff08;1&#xff09;下载Ubuntu镜像&#xff08;2&#xff09;打开VmWare16&#xff0c;点击创建新的虚拟机&#xff08;3&#xff09;选择典型&#xff0c;下一步&#xff08;4&#xff09;选择刚…

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器&#xff0c;那么什么是版本控制器呢&#xff1f; 下面讲个故事为大家讲解一…

Linux内核源码分析 (B.6)从内核源码看 slab 内存池的创建初始化流程

Linux内核源码分析 (B.6)从内核源码看 slab 内存池的创建初始化流程 文章目录 Linux内核源码分析 (B.6)从内核源码看 slab 内存池的创建初始化流程1\. \_\_kmem\_cache\_alias1.1 find\_mergeable 查找可被复用的 slab cache1.2 calculate\_alignment 综合计算出一个合理的对齐…

Linux内嵌汇编

文章目录 前言一、内嵌汇编二、内嵌汇编示例三、不使用printf实现打印四、INT 80H总结 前言 本篇文章我们来讲讲内嵌汇编的概念和教大家如何来编写内嵌汇编的代码。 一、内嵌汇编 内嵌汇编&#xff08;Inline Assembly&#xff09;是将汇编代码嵌入到高级语言中的一种编码技…

qsort库函数的使用

目录 1.认识qsort函数 2.qsort 排序整型数据 3.qsort排序字符型数据 4.qsort排序浮点型数据、 5.qsort排序结构体数据 6.总结 1.认识qsort函数 注&#xff1a;以上信息来源于cplusplus官网 翻译以上信息如下&#xff1a; qsort函数是c语言标准库中基于快速排序算法实现的一…

如何快速走出网站沙盒期(关于优化百度SEO提升排名)

网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名&#xff0c;甚至被完全忽略的现象。这个现象往往发生在新建立的网站上&#xff0c;因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期&#xff0c;需要优化百度SEO。以下是5个…

Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数

背景&#xff1a; Redis的softMinEvictableIdleTimeMillis&#xff0c;minEvictableIdleTimeMillis是一个令人疑惑两个参数&#xff0c;特别是当它和minIdle组合起来时就更难理解了&#xff0c;本文就来梳理下他们的之间的关系 softMinEvictableIdleTimeMillis&#xff0c;mi…

如何正确安装封箱机胶带

胶带是封箱机与开箱机最重要的耗材&#xff0c;在使用的过程中安装胶带卷是必不可少的工作项目&#xff0c;但很多用户使用很久了&#xff0c;安装的胶带仍然不理想&#xff0c;下面就和您分享一下如何正确安装封箱机胶带。 1、带卷安装要牢靠。封箱机胶带卷的固定是靠3个卡簧来…