思维导图
 

 
小练习 
 

 
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();
}
 
效果图:
 
