Qt(day3)

news2024/11/27 22:39:07

思维导图

小练习 

second.h

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>
#include<QLabel>
#include<QLineEdit>
#include<QPushButton>
#include<QTimerEvent>
#include<QTime>
#include<QTextEdit>
#include<QTextToSpeech>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slot();
    void startbtn_slot();
    void endbtn_slot();

public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

    void timerEvent(QTimerEvent *event) override;

private:
    Ui::Second *ui;
    QLabel *lab;
    QLineEdit *ledit;
    QPushButton *startbtn;
    QPushButton *endbtn;
    QTextEdit *tedit;

    int timer_id;   //定时器id

    QTextToSpeech *speecher;
};

#endif // SECOND_H

second.cpp

#include "second.h"
#include "ui_second.h"

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

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

    this->setFixedSize(QSize(800,700)); //固定文件框的大小
    this->setWindowTitle("定时器");   //设置文件的标题

    lab=new QLabel(this);   //创建一个lab
    lab->resize(300,220);   //设置lab大小
    lab->move(50,50);       //设置lab的位置
    lab->setStyleSheet("background-color:skyblue;font-weight:bold;font-size:60px;");

    ledit=new QLineEdit(this);  //创建一个ledit
    ledit->resize(300,100);   //设置ledit大小
    ledit->move(lab->x()+400,lab->y());       //设置ledit的位置


    startbtn=new QPushButton(this);  //创建一个startbtn
    startbtn->resize(140,100);   //设置startbtn大小
    startbtn->move(ledit->x(),ledit->y()+120);       //设置startbtn的位置
    startbtn->setText("start");     //设置startbtn的文本

    endbtn=new QPushButton(this);  //创建一个endbtn
    endbtn->resize(140,100);   //设置endbtn大小
    endbtn->move(ledit->x()+160,ledit->y()+120);       //设置endbtn的位置
    endbtn->setText("end");     //设置endbtn的文本

    tedit=new QTextEdit(this);  //创建一个tedit
    tedit->resize(700,300);
    tedit->move(lab->x(),lab->y()+300);


    connect(startbtn,&QPushButton::clicked,this,&Second::startbtn_slot);
    connect(endbtn,&QPushButton::clicked,this,&Second::endbtn_slot);
}

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

void Second::jump_slot(){
    this->show();
}

void Second::startbtn_slot(){
    timer_id=this->startTimer(1000);
}

void Second::endbtn_slot(){
    this->killTimer(timer_id);
}

void Second::timerEvent(QTimerEvent *event){
    QTime sys_t=QTime::currentTime();
    QString t=sys_t.toString("hh:mm:ss");

    if(event->timerId()==timer_id){
        lab->setText(t);
    }
    if(t==ledit->text()){
        speecher->say(tedit->toPlainText());
    }

}

 效果图:

文本编辑器的保存工作

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QFontDialog>      //字体对话框类
#include<QFont>            //字体类
#include<QMessageBox>
#include<QColorDialog>     //颜色对话框类
#include<QColor>           //颜色类
#include<QFileDialog>       //文件对话框类
#include<QDebug>
#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

weight.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("隶书", 2, 10, false),    //初始字体
                         this,                           //父组件
                         "字体对话框");                      //对话框标题

    //要对ok进行判断,如果用户点击的取消,则ok为false,否则为true
    if(ok)
    {
        //说明用户选中了字体,直接使用字体即可
        //将该字体加载到文本上面
        //ui->textEdit->setFont(f);           //将该组件中的全部字体进行设置新字体

        ui->textEdit->setCurrentFont(f);          //将组件中当前选中的字体进行设置,其余字体不设置

    }else
    {
        //说明用户没有选中字体
        QMessageBox::information(this,"提示","用户没有选中字体");
    }
}

//颜色按钮对应的槽函数
void Widget::on_colorBtn_clicked()
{
    QColor c = QColorDialog::getColor(QColor(0,255,255),    //初始颜色
                                      this,                 //父组件
                                      "选择颜色");          //窗口标题
    //有没有选中颜色
    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(*.*);; Img(*.png *.jpg *.xpm);; 文本(*.txt)");//过滤器

    qDebug()<<fileName;

    //文件操作
    //1、实例化一个文件对象
    QFile file(fileName);          //使用有参构造构造一个文件对象
    if(!file.exists())           //判断文件是否存在
    {
        return;
    }

    //2、打开文件
    if(!file.open(QFile::ReadWrite))       //判断文件是否打开成功
    {
        return;
    }

    //3、从文件中读取数据
    QByteArray msg = file.readAll();

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

    //将从文件中读取的内容展示到ui界面上
    ui->textEdit->setText(QString::fromLocal8Bit(msg));

}

//保存按钮对应的槽函数
void Widget::on_saveBtn_clicked()
{
    //获取路径
    QString fileName = QFileDialog::getSaveFileName();

    //实例化文件对象
    QFile file(fileName);
    //打开文件
    if(!file.open(QFile::WriteOnly))
    {
        return;
    }

    //将ui界面上的数据读取下来
    QString msg = ui->textEdit->toPlainText();

    //将信息写入到文件中
    file.write(msg.toLocal8Bit());

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

效果图:

 

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

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

相关文章

北京小程序开发-微信小程序开发时间总结

一、双线程模型 渲染线程和逻辑线程 小程序的双线程指的就是渲染线程和逻辑线程&#xff0c;这两个线程分别承担UI的渲染和执行 JavaScript 代码的工作 渲染线程使用 Webview 进行 UI 的渲染呈现。Webview 是一个完整的类浏览器运行环境&#xff0c;本身具备运行 JavaScript…

Shiro 框架基本使用

文章目录 Shiro框架介绍Shiro 基本使用SimpleAccountRealmIniRealmJdbcRealmCustomRealm&#xff08;自定义Realm&#xff09; Shiro框架介绍 Apache Shiro是一个强大且易用的Java安全框架&#xff0c;它执行身份验证、授权、密码和会话管理。Shiro框架通过其三个核心组件&…

网络爬虫-----爬虫的分类及原理

目录 爬虫的分类 1.通用网络爬虫&#xff1a;搜索引擎的爬虫 2.聚焦网络爬虫&#xff1a;针对特定网页的爬虫 3.增量式网络爬虫 4.深层网络爬虫 通用爬虫与聚焦爬虫的原理 通用爬虫&#xff1a; 聚焦爬虫&#xff1a; 爬虫的分类 网络爬虫按照系统结构和实现技术&#…

白鲸开源 X SelectDB 金融大数据联合解决方案公布!从源头解决大数据开发挑战

业务挑战与痛点 随着互联网技术的发展、云计算技术的成熟、人工智能技术的兴起和数字化经济的崛起&#xff0c;数据已成为企业的核心资产。在金融行业中&#xff0c;数字化已成为了支撑各类业务场景的核心力量&#xff0c;包括个人理财、企业融资、股票交易、保险理赔、贷款服…

【Java 基础篇】Java 文件及文件夹操作详解

在Java编程中&#xff0c;文件和文件夹操作是常见的任务之一。你可能需要读取、写入、创建、删除文件或文件夹&#xff0c;以及遍历文件系统中的内容。本文将详细介绍Java中如何执行这些常见的文件和文件夹操作&#xff0c;适用于初学者和基础用户。 1. 文件操作 读取文件内容…

如何显示并管理Python应用的数据?Kendo UI for Angular有妙招!

Angular是Python应用中进行数据管理和显示的一个很好的选择&#xff0c;如果能使用Kendo UI for Angular则可以更进一步。 PS&#xff1a;给大家推荐一个实用组件~Kendo UI for Angular是专业级的Angular UI组件库&#xff0c;不仅是将其他供应商提供的现有组件封装起来&#…

关于IDEA没有显示日志输出?IDEA控制台没有显示Tomcat Localhost Log和Catalina Log 怎么办?

问题描述&#xff1a; 原因是;CATALINA_BASE里面没有相关的文件配置。而之前学习IDEA的时候&#xff0c;把这个文件的位置改变了。导致&#xff0c;最后输出IDEA的时候&#xff0c;不会把日志也打印出来。 检查IDEA配置; D:\work_soft\tomcat_user\Tomcat10.0\bin 在此目录下&…

打造安全的Open RAN

O-RAN架构在为RAN网络引入更多灵活性和最佳实践的同时&#xff0c;也面临着更多的安全风险。本文分别从网元接口通信、RIC安全框架、云原生安全平台等角度全面介绍O-RAN架构在安全方面应该采取的措施。原文: Security in Open RAN 引言 Open RAN是O-RAN联盟在3GPP及其他标准的…

Eureka服务器注册

一。Eureka服务器注册 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

Windows10/11无线网卡WIFI驱动详细下载安装教程

官网下载WIFI驱动 《intel官网》 找到下载Windows 10 and Windows 11* WiFi package drivers 查看详细信息 下载对应操作系统的WIFI驱动 安装驱动&#xff0c;然后重启电脑即可。

SSM - Springboot - MyBatis-Plus 全栈体系(十)

第二章 SpringFramework 五、Spring AOP 面向切面编程 4. Spring AOP 框架介绍和关系梳理 AOP是一种区别于OOP的编程思维&#xff0c;用来完善和解决OOP的非核心代码冗余和不方便统一维护问题&#xff01;代理技术&#xff08;动态代理|静态代理&#xff09;是实现AOP思维编…

云原生之使用Docker部署Nas-Cab个人NAS平台

云原生之使用Docker部署Nas-Cab个人NAS平台 一、Nas-Cab介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Nas-Cab镜像五、部署Nas-Cab5.1 创建挂载目录5.2 创建Nas-Cab容…

前端开发之el-table 表头不换行且宽度自适应

element的table中动态添加表头并设置表头不换行 前言效果图element中使用代码 element-plus中使用:没有了h代码 前言 本次讲解的是elemen和element-plus来通过table的标签render-header来实现的 效果图 element中使用 代码 <template><div><el-table :data&q…

win10修改截图快捷键

用惯了截图快捷键&#xff0c;在新电脑上截图不方便&#xff0c;win10自带截图功能&#xff0c;修改一下系统设置就能使用 点击左下角开始图标&#xff0c;找到Windows 附件&#xff0c;鼠标放到截图工具图标上 点击鼠标右键&#xff0c;选择更多&#xff0c;打开文件位置 跳转…

【排障记录】扩展坞USB 3.0能用而2.0不能用

一、症状表现 日常使用小米的一个扩展坞连接笔记本&#xff0c;平时用来插U盘&#xff0c;没有什么问题&#xff0c;但是今天插了鼠标键盘&#xff0c;发现根本不识别 二、排查过程 目前的连接结构 笔记本C口→type-C延长线→扩展坞A→设备 1.排查笔记本故障 将键盘鼠标插…

MYSQL索引——B+树讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树&#xff0c;不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中&#xff1b; 任何一…

Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发

Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤&#xff0c;易⽤性⾼&#xff0c;如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富&#xff0c;基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能⼒。更加完善了多语言支持&#xff08;GO PYTHON R…

vue基础知识十四:说说你对vue的mixin的理解,有什么应用场景?

一、mixin是什么 Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类 Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码复用又避免了多继承的复杂 Vue中的mixin 先来看一…

【关于RHCE考试和准备看这一篇就够了】

一、文章大纲 认证机构 课程体系 面向人群 证书有效期 备考学习周期 考试内容 证书领取 证书样例 二、认证机构 RHCE全称为红帽认证工程师&#xff08;Red Hat Certified Engineer&#xff09;&#xff0c;其认证机构为红帽。红帽可以说是Linux发行版中的龙头老大&am…

Android 数据库封装(SQLite)

Android 数据库操作&#xff08;SQLite&#xff09; Android 数据库操作&#xff08;SQLite&#xff09;动态预览使用初始化生成表实体类插入数据批量插入删除数据删除全部修改数据查找&#xff08;列表&#xff09;查找&#xff08;单条&#xff09;条件查找&#xff08;列表&…