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

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

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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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 texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += 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.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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.rhkb.cn/news/136568.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是GPT磁盘?介绍GPT(GUID 分区表)磁盘及其优势!

GPT概述 GPT磁盘是什么意思&#xff1f;GPT是全局唯一标识符分区表&#xff08;GUID Partition Table&#xff09;的简称&#xff0c;它是硬盘分区表结构的一个标准模式。在我们深入了解GPT磁盘的特性之前须知&#xff0c;MBR磁盘的分区信息直接保存在主引导记录&#xff0…

「聊设计模式」之迭代器模式(Iterator)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是软件开发中经验的总结&#xff0c;是一种被反复…

共享wifi贴项目现在到底还能不能做?

共享wifi贴作为一项新兴的业务&#xff0c;近年来在城市中越来越受欢迎。然而&#xff0c;很多人对共享wifi项目的盈利能力表示怀疑&#xff0c;不确定它是否能够持久发展。那么&#xff0c;共享wifi贴到底能不能做&#xff1f;让我来给你解答。 首先&#xff0c;共享WiFi项目可…

Pyspark案例综合(数据计算)

数据计算 map方法 map算子 map算子&#xff08;成员方法&#xff09;接受一个处理函数&#xff0c;可用lambda快速编写&#xff0c;对RDD内的元素一一处理&#xff0c;返回RDD对象 链式调用 对于返回值是新的RDD的算子&#xff0c;可以通过链式调用的方式多次调用算子 &q…

一键集成prometheus监控微服务接口平均响应时长

一、效果展示 二、环境准备 prometheus + grafana环境 参考博文:https://blog.csdn.net/luckywuxn/article/details/129475991 三、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter

身份和访问管理解决方案:混合型IAM

对于依赖于本地 IT 基础结构和传统安全模型的组织&#xff0c;可以更轻松地验证和授权企业网络内的所有内容&#xff0c;包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络 &#xff08;VPN&#xff09; 和网络访问控制 &#xff08;NA…

【教程】微信小程序导入外部字体详细流程

前言 在微信小程序中&#xff0c;我们在wxss文件中通过font-family这一CSS属性来设置文本的字体&#xff0c;并且微信小程序有自身支持的内置字体&#xff0c;可以通过代码提示查看微信小程序支持字体&#xff1a; 这些字体具体是什么样式可以参考&#xff1a; 微信小程序--字…

从零学习开发一个RISC-V操作系统(一)丨计算机组成原理相关知识与RISC-V指令集简介

本篇文章的内容 一、计算机组成原理的相关知识1.1 计算机的硬件组成1.2 程序的存储与执行1.3 程序语言的设计和进化1.4 存储设备的层次结构1.5 操作系统 二、RISC-V的指令集ISA简介2.1 什么是ISA2.2 复杂指令集&#xff08;CISC&#xff09;和精简指令集&#xff08;RISC&#…

探讨基于IEC61499 的分布式 ISA Batch 控制系统

ISA SP88 是批次过程控制的标准&#xff0c;对应的IEC标准是IEC 61512。该标准中一个重要的部分是配方管理&#xff08;Recipe Management&#xff09;。 所谓配方&#xff0c;是根据批量产品的要求&#xff0c;材料设定加工工艺&#xff0c;加工流程和参数。类似于传统制造业的…

2023年以就业为目的学习Java还有必要吗?(文末送书)

目录 一、活力四射的 Java二、从零开始学会 Java三、准备工作四、基础知识五、进阶知识六、高级知识七、结语参与方式 大家好&#xff0c;我是哪吒。 文末送5本《Java编程动手学》 今天来探讨一个问题&#xff0c;现在学 Java 找工作还有优势吗&#xff1f; 在某乎上可以看到…

Cesium 测量距离

Cesium 测量距离 需求分析第一种方式&#xff1a;使用测距 Measure第二中方式&#xff1a;使用 distance&#xff0c;自己封装第三种方式&#xff1a;自己封装&#xff08;样式不太好&#xff09; 需求 实际开发中我们经常需要用到量测工具&#xff0c;而Cesium没有直接提供量…

MySQL使用C语言链接

MySQL使用C语言链接 MySQL connect接口介绍mysql_initmysql_real_connectmysql_querymysql_store_result\mysql_use_result()mysql_num_rowsmysql_num_fieldsmysql_fetch_fieldsmysql_fetch_rowmysql_close MySQL connect 使用C语言来连接数据库&#xff0c;本质上就是利用一些…

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

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

成功解决Selenium 中116版本的chromedriver找不到问题

Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver 文章目录 Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver1.当前作者的谷歌浏览器版本2.当前驱动官网的最新版本3.当不想降低浏览器版本继续使用谷歌浏览器的办法 1.当…

《计算机视觉中的多视图几何》笔记(5)

5 Algorithm Evaluation and Error Analysis 本章主要讲述对算法的验证和误差分析。 概述了两种计算这种不确定性&#xff08;协方差&#xff09;的方法。第一个基于线性近似值&#xff0c;涉及串联各种雅各布表达式&#xff0c;第二个是更容易实施蒙特卡洛方法。 文章目录 …

Linux——IO

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;是不是只有C/C有文件操作呢&#xff1f;python&#xff0c;java&…

Ubuntu安装中文拼音输入法

ubuntu安装中文拼音输入法 ubuntu版本为23.04 1、安装中文语言包 首先安装中文输入法必须要让系统支持中文语言&#xff0c;可以在 Language Support 中安装中文语言包。 添加或删除语音选项&#xff0c;添加中文简体&#xff0c;然后会有Applying changes的对话框&#x…

源码编译Qt 5.15.9+msvc2019

官方文档里给出了详细步骤&#xff1a; Building Qt Sources Building Qt 5 from Git (Wiki) 注&#xff1a;本文基于windows11vs2019x64qt5.15.9&#xff0c;不编译Qt WebEngine 归纳总结如下&#xff1a; 准备阶段 Qt for Windows - Requirements 安装python&#xff0c;…

逼自己看完,Redis的事务你就掌握了!!!

目录 1、对于事务的理解 1.1、回顾MySQL的事务 1.2、Redis的事务 2、事务命令使用 3、watch的实现原理 3.1、watch用来干什么的&#xff1f; 3.2、watch的实现原理 1、对于事务的理解 1.1、回顾MySQL的事务 在MySQL中&#xff0c;事务有4个特性&#xff1a; 原子性&a…

MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办

方法1&#xff1a; 在mybatis核心配置文件中指定&#xff0c;springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置&#xff0c;本来就省掉了mybatis的核心配置文件&#xff0c;现在又加回去算什么事&#xff0c;总之这种方式可行但没人这样用 具体操作&…