day50:QTday3,对话框补充、事件处理机制

news2024/11/27 5:34:34

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

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;       //返回用户是否选中字体


    //直接调用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(*.*);;Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");    //过滤器
    //判断是否选中文件
    if(fileName.isNull())
    {
        QMessageBox::information(this,"提示","用户取消了选择文件");
        return;
    }


    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();


    //将读取的文本展示在ui界面
    ui->textEdit->setText(msg);


}

//保存按钮对应的槽函数
void Widget::on_saveBtn_clicked()
{
    //获取保存文件对话框
    QString fileName=QFileDialog::getSaveFileName(
            this,"save file","./","All(*.*);;Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");

    //判断是否选中文件
    if(fileName.isNull())
    {
        QMessageBox::information(this,"提示","用户取消了保存文件");
        return;
    }

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


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

    //3、读写操作
    QString msg = ui->textEdit->toPlainText();
    file.write(msg.toUtf8());

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

成品效果图:

二、

hwk3.pro:

QT       += core gui texttospeech

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>
#include <QTime>
#include <QTextToSpeech>          //文本转语音类
#include <QVoice>

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_Btn1_clicked();

    void on_Btn2_clicked();

private:
    Ui::Widget *ui;

    //定义一个播报员
    QTextToSpeech *speecher;

    int timer_id;    //定时器id号
    int timer_id1;   //系统定时器id号
};
#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);

    //给播报员实例化空间
    speecher = new QTextToSpeech(this);
}

Widget::~Widget()
{
    delete ui;

}

//启动定时器按钮对应的槽函数
void Widget::on_Btn1_clicked()
{
    timer_id = this->startTimer(1000);
    timer_id1 = this->startTimer(1000);
}

//启动定时器按钮对应的槽函数
void Widget::on_Btn2_clicked()
{
    this->killTimer(timer_id1);
}

void Widget::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timer_id)
    {
        QTime sys_t = QTime::currentTime();     //获得系统时间
        //将QTime类对象转换为字符串
        QString t1 = sys_t.toString("hh:mm:ss");

        //展示到ui界面
        ui->timeLab->setText(t1);
    }
    if(e->timerId() == timer_id1)
    {
        QTime sys_t1 = QTime::currentTime();     //获得系统时间
        //将QTime类对象转换为字符串
        QString t1 = sys_t1.toString("hh:mm:ss");

        if(t1==ui->lineEdit->text())
        {
            speecher->say(ui->textEdit->toPlainText());
        }
    }
}

效果图:

三、思维导图:day2对话框补充、 有道云笔记

                        day3事件处理机制、有道云笔记

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

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

相关文章

springboot配置注入增强(三)自定义数据源/自定义解析方法

我们回忆下上一篇文章的内容&#xff0c;属性注入的关键节点是PropertySourcesPlaceholderConfigurer的BeanFactory后置处理器org.springframework.context.support.PropertySourcesPlaceholderConfigurer#postProcessBeanFactory&#xff0c;只有在执行这个方法前设置到Enviro…

竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

平均精度(AP)

什么是平均精度(AP) 平均精度 (AP)并不是精度 (P)的平均值。 平均精度 (AP) 是按类别计算的。 mAP&#xff08;mean average precision&#xff09;是一个平均值&#xff0c;常用作目标检测中的检测精度指标mAP 指标通过对于一个平均目标来检测任务中多个目标所对应不同 AP&a…

9.19号作业

2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…

Centos安装显卡

1、安装基础环境 yum -y install epel-release yum -y install gcc kernel-devel kernel-headers 2.对应内核版本 yum info kernel-devel kernel-headers Cat /proc/version 3、yum安装版本不对应。则去官网手动下载 离线安装对应的rpm&#xff1a; https://pkgs.org/dow…

电脑桌面的复选框如何取消

电脑桌面图标的复选框如何取消 1. 概述2. 去掉图标的复选框方法结束语 1. 概述 当你拿到新的电脑开机后&#xff0c;发现桌面上软件应用的图标左上角有个小框&#xff0c;每次点击图标都会显示&#xff0c;并且点击图标时&#xff0c;小框还会打上√&#xff1b; 这个小框的…

移动端APP测试-如何指定测试策略、测试标准?

制定项目的测试策略是一个重要的步骤&#xff0c;可以帮助测试团队明确测试目标、测试范围、测试方法、测试资源、测试风险等&#xff0c;从而提高测试效率和质量。本篇是一些经验总结&#xff0c;理论分享。并不是绝对正确的&#xff0c;也欢迎大家一起讨论。 文章目录 一、测…

activiti7的数据表和字段的解释

activiti7的数据表和字段的解释 activiti7版本有25张表&#xff0c;而activiti6有28张表&#xff0c;activiti5有27张表&#xff0c;绝大部分的表和字段的含义都是一样的&#xff0c;所以本次整理的activiti7数据表和字段的解释&#xff0c;也同样适用于activiti6和5。 1、总览…

higher-order function in functional programming (JS)

1 functional programming该怎么理解&#xff1f; functions就是values&#xff0c;就像String or Numbers那样&#xff0c;可以构造匿名函数&#xff0c;并把函数赋给某个变量 或者 传递给其他函数&#xff08;higher-order function&#xff09; 2 higher-order function有…

B树的定义和特点

1.多叉查找树的效率 策略1:m叉查找树中&#xff0c;规定除了根节点外&#xff0c;任何结点至少有[m/2]个分叉&#xff0c;即至少含有[m/2]-1个关键字。策略2:m叉查找树中&#xff0c;规定对于任何一个结点&#xff0c;其所有子树的高度都要相同。 而满足以上两种策略的树被称…

新手怎样快速上手接口测试?掌握这几个知识点直接起飞!

接口测试是测试系统组件间接口的一种方式&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的增删改查操作&#xff0c;以及系统之间的逻辑关系等。 接口的几种类型 接口的类型包括&#xff1a;post &#xff0c;get&…

Postman应用——控制台调试

当你在测试脚本中遇到错误或意外行为时&#xff0c;Postman控制台可以帮助你识别&#xff0c;通过将console.log调试语句与你的测试断言相结合&#xff0c;你可以检查http请求和响应的内容&#xff0c;以及变量之类的。 通常可以使用控制台日志来标记代码执行&#xff0c;有时…

Golang gorm 一对一关系

一对一关系 一对一关系比较少&#xff0c;一般用于表的扩展例如一张用户表&#xff0c;有很多字段那么就可以把它拆分为两张表&#xff0c;常用的字段放主表&#xff0c;不常用的字段放详情表。 针对用户表来说可以通过user去点出userinfo。 创建表和插入数据 package mainimp…

一款超强的 Python 分析工具!

这是一个star暴增的项目&#xff1a;PyGWalker&#xff0c;也是目前看来更加轻量级的分析工具&#xff01; 之前我们的数据分析思路是&#xff1a; 1、利用 R 或者 Python 进行数据分析‍ 2、利用沉跌跌的工具进行数据分析&#xff0c;比如&#xff1a;tableau 今天介绍的*…

Hive 数据仓库介绍

目录 ​编辑 一、Hive 概述 1.1 Hive产生的原因 1.2 Hive是什么&#xff1f; 1.3 Hive 特点 1.4 Hive生态链关系 二、Hive架构 2.1 架构图 2.2 架构组件说明 2.2.1 Interface 2.2.1.1 CLI 2.2.1.2 JDBC/ODBC 2.2.1.3 WebUI 2.2.2 MetaData 2.2.3 MetaStore 2.2…

tokenizers总结

简介 tokenize的目标是把输入的文本流&#xff0c;切分成一个个子串&#xff0c;每个子串相对有完整的语义&#xff0c;便于学习embedding表达和后续模型的使用。 tokenize有三种粒度&#xff1a;word/subword/char word词&#xff0c;是最自然的语言单元。对于英文等自然语…

通过数据导入导出功能批量重命名文件名称更简单

在日常工作中&#xff0c;我们经常需要对大量的文件进行重命名&#xff0c;以方便管理和查找。然而&#xff0c;手动一个一个修改文件名称的方式不仅费时费力&#xff0c;而且容易出错。为了提高工作效率&#xff0c;我们可以使用一款名为“固乔文件管家”的软件来实现文件的批…

【MySQL多表查询以及事务、索引】

1. 多表查询 1.1 概述 1.1.1 数据准备 #建议&#xff1a;创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称…

基于自编译的onlyoffice镜像,关于修改字体的问题

基于自编译的onlyoffice镜像&#xff0c;关于修改字体的问题 自编译onlyoffice镜像来自于 https://blog.csdn.net/Gemini1995/article/details/132427908 该镜像里面没有documentserver-generate-allfonts.sh文件&#xff0c;所以需要自己创建一个&#xff08;建议放在/usr/b…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时&#xff0c;它们也会折叠成一个右…