作者:小波

QQ:463431476

请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/

我的第二款软件:CET四六级单词背诵软件。基于QT5.5.0、sql数据库、以及TTS文本识别语音单词朗读的一款软件。

第一款软件的sql数据库软件的编写:http://www.cnblogs.com/xiaobo-Linux/p/4676950.html

现在来讲解我的第二款高大上的代码:

这个是.pro的代码,其中axcontainer 是调用的win7 SDK语音库必须的;QT += sql 是引用sql数据库必须的;RC_FILE=icon.rc引用的ico图标文件必须的。

#-------------------------------------------------
#
# Project created by QtCreator --28T13::
#
#-------------------------------------------------

QT       += core gui axcontainer #axcontainer speak
QT += sql         #sql

greaterThan(QT_MAJOR_VERSION, ): QT += widgets

TARGET = CET_words
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RC_FILE=icon.rc   #ico

说起调用系统语音实现TTS也就是text to speech 文本识别成语音朗读,Qt调用win7系统语音库的话可能还得安装SDK语音库,这里附上win7官网sdk下载地址:

http://www.microsoft.com/en-us/download/details.aspx?id=10121

这里选择如图所示:

下载完后才发现本程序可能不需要。不过最好 下载好并解压后安装。

第二个是主窗口头文件mainwindow.h的代码。有引用的数据库的头文件:#include <QSqlDatabase>  #include <QSqlQuery>  #include <QSqlRecord>;

时间的头文件QTimer用于时间停顿;windows.h好像用不着也可以调用系统sleep()函数来时间停顿。QSqlDatabase db;      //声明数据库类 用于sql数据库  #include <QAxObject>  和 QAxObject * voiceObj  是调用win7系统SDK语音库的接口。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAxObject> //speak com
#include <QSqlDatabase> //数据库类
#include <QSqlQuery>    //执行语句类
#include <QSqlRecord>   //返回记录类
#include <QtSql>
#include <QApplication>
#include <QMessageBox>
#include <iostream>
#include <QtDebug>
#include <QSpinBox>
#include <QTimer>
#include "QDebug"
//#include "windows.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    );
    ~MainWindow();

private slots:
   void select();
   void on_search_clicked();
   void on_addword_clicked();
   void on_speak_word_clicked();
   void on_del_word_clicked();
   void on_back_clicked();
   void on_mouse_speak_word_clicked();
   void  on_revise_word_clicked();
private:
    Ui::MainWindow *ui;
    QSqlDatabase db;      //声明数据库类
    QAxObject * voiceObj; //speak

};

#endif // MAINWINDOW_H

main代码:其中主要是实现了数据库CET的创建,然后又建立了一张CET的数据库表格。程序开启后CET数据库以及CET表格都会自动建立。

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //创建DB文件,创建表格
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    std::cout<<"begin sqlite"<<std::endl;
    db.setDatabaseName("CET.db");
    if ( !db.open()){
    QMessageBox::critical(NULL, QObject::tr("Collection"), QObject::tr("failed to connect to database!"));
    ;
    }
    QSqlQuery query;
    query.exec("create table CET (id integer PRIMARY KEY AUTOINCREMENT,word text,mean text)");

    MainWindow w;
    w.show();

    return a.exec();
}

下面介绍主要的代码mainwindow.cpp

先介绍一下怎么实现语音TTS朗读的吧,我认为这个比较好玩。但也是很简单的。其次就是sql数据库的使用了。

TTS实现朗读的代码:

SAPI:

  voiceObj = new QAxObject("sapi.spvoice",this);

然后再利用这个代码就搞定了:

voiceObj->dynamicCall()函数。里面的 speak()函数。
 voiceObj->dynamicCall("speak(1)", model->data(model->index(i,j)).toString());

一个时间停顿的函数:

头文件:#include“Qtimer.h”

             QTime t;
             t.start();
              ) //时间停顿
             {
             QCoreApplication::processEvents();
             }

对于对数据库表依次的朗读,利用for循环与tableview结合进行数据库的遍历。这里详见另外一篇博客:http://www.cnblogs.com/xiaobo-Linux/p/4684671.html

void MainWindow::on_speak_word_clicked()

{
     QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);

     model->setQuery(QString("select *from CET"));

  //遍历model中的所有数据
     for(int i=0;i<model->rowCount();i++)       //model->rowCount()获取model的行数
    {
         for( int times = ui->spReadTimes->value();times>0;times-- ) //读单词次数
          {

             QTime t;
             t.start();
             while(t.elapsed()< ui->spEveryWord->value()*1000 ) //时间停顿
             {
             QCoreApplication::processEvents();
             }


        for(int j=1;j<model->columnCount();j++)       //model->columnCount()获取model的列数
        {

              voiceObj->dynamicCall("speak(1)", model->data(model->index(i,j)).toString());
          }
    }
}
}

主要的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("小波的CET单词背诵 V1.0");
    setWindowIcon(QIcon("xiaobo.ico"));//设置软件图标
    select();//显示表格
    voiceObj = new QAxObject("sapi.spvoice",this);
}

MainWindow::~MainWindow()
{
    delete ui;
    db.close();
}

void MainWindow::on_addword_clicked()
{

    QSqlQuery query;
    query.prepare("insert into CET (id,word,mean)values(1,:word,:mean )"); //id自动增加,先从1起,之后无需手动插入

    query.prepare("insert into CET (word,mean)values(:word ,:mean )");
    query.bindValue(":word",ui->textEdit_1->text());
    query.bindValue(":mean",ui->textEdit_2->text());
    query.exec();
    select();//显示表格
}

void MainWindow::on_search_clicked()
{
         QSqlQuery query;
         ui -> tableView -> clearSpans(); //tableview清空
         QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);
         query.prepare("select  *from CET where word = :word ");  // like 模糊查询没成功
         query.bindValue(":word",ui->textEdit_3->text());
         query.exec();
          model->setQuery(query);
          model->setHeaderData(,Qt::Horizontal,QObject::tr("顺序"));
          model->setHeaderData(,Qt::Horizontal,QObject::tr("单词"));
          model->setHeaderData(,Qt::Horizontal,QObject::tr("释义"));
          ui->tableView->setModel(model);
}

void MainWindow::select()
{  //将sql表格显示到tableView里
 QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);
 model->setQuery(QString("select *from CET"));
 model->setHeaderData(,Qt::Horizontal,QObject::tr("顺序"));
 model->setHeaderData(,Qt::Horizontal,QObject::tr("单词"));
 model->setHeaderData(,Qt::Horizontal,QObject::tr("释义"));
 ui->tableView->setModel(model);
}

void MainWindow::on_speak_word_clicked()

{

     QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);

     model->setQuery(QString("select *from CET"));

  //遍历model中的所有数据
     ;i<model->rowCount();i++)       //model->rowCount()获取model的行数
    {

         ;times-- ) //读单词次数
          {

             QTime t;
             t.start();
              ) //时间停顿
             {
             QCoreApplication::processEvents();
             }

        ;j<model->columnCount();j++)       //model->columnCount()获取model的列数
        {

              voiceObj->dynamicCall("speak(1)", model->data(model->index(i,j)).toString());
          }
    }

}

}
void MainWindow::on_del_word_clicked()
{

    QSqlQuery query;

   int curRow = ui->tableView->currentIndex().row();     //鼠标选择删除第几行

    QModelIndex index = ui->tableView->currentIndex();

    ).data().toInt();

    query.prepare("delete from CET where id = :id");

    query.bindValue(":id",id);
    query.exec();
    select();

}

void MainWindow::on_back_clicked()
{

    select();
}

void MainWindow::on_mouse_speak_word_clicked()
{

    ;times-- ) //读单词次数
     {
    voiceObj->dynamicCall("speak(1)",ui->tableView->currentIndex().data()); //鼠标选中tableview单元格内数据来朗读
    QTime t;
    t.start();
     ) //时间停顿
    {
    QCoreApplication::processEvents();
    }
    }
}

void MainWindow::on_revise_word_clicked()
{
    QSqlQuery query;

    int row = ui->tableView->currentIndex().row();     //鼠标选择第几行

     QModelIndex index = ui->tableView->currentIndex();

     ).data().toInt();
     query.prepare("update CET set word =:word where id= :id ");
     query.bindValue(":id",id);
     query.bindValue(":word",ui->textEdit_5->text());
      query.exec();
      query.prepare("update CET set mean =:mean where id= :id ");
      query.bindValue(":id",id);
      query.bindValue(":mean",ui->textEdit_4->text());
      query.exec();

      select();

}

mainwindow。ui的界面设计:

代码的演示部分:

视频演示:

http://files.cnblogs.com/files/xiaobo-Linux/%E5%B0%8F%E6%B3%A2%E7%9A%84CET%E5%8D%95%E8%AF%8D%E8%83%8C%E8%AF%B5%E8%BD%AF%E4%BB%B6%E8%A7%86%E9%A2%91%E6%BC%94%E7%A4%BA.zip

软件的发布版本:http://pan.baidu.com/s/1mgrIMwC

基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0的更多相关文章

  1. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  2. 清除SQL数据库文本字段中的回车、换行符的方法

    清除SQL数据库中文本字段的回车.换行符的方法 清除回车符: update tableName set columnName = rtrim(ltrim(replace(columnName ,cha ...

  3. 【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0

    目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v2.0 授权登录与权限检查 新功能的测试 兼容性测试 性能测试 前端测试-- ...

  4. 后台框架 FastAdmin V1.0.0.20200228 发布,为疫情防控作贡献

    后台框架 FastAdmin V1.0.0.20200228 发布,为疫情防控作贡献 https://www.oschina.net/news/113694/fastadmin-1-20200228- ...

  5. J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

  6. 基于Qt5.5.0的sql,C++备忘录软件的编写

    我的第一个软件. 基于Qt5.5.0的 sql ,C++备忘录软件version1.0的编写 我用的Qt版本是5.5.0免配置编译器的版本,这里附上我使用的软件下载地址:http://download ...

  7. 【C#】SQL数据库助手类2.0(自用)

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  8. 跨服务器备注SQL数据库 分类: SQL Server 2015-03-05 08:52 227人阅读 评论(0) 收藏

    任务:把服务器1上的SQL数据库自动备份到服务器2上,命名格式=数据库名+年月日+小时. 说明: 服务器2=>192.168.0.22 数据库名=>Book 共享文件夹路径:192.168 ...

  9. Microsoft-PetSop4.0(宠物商店)-数据库设计-Sql

    ylbtech-DatabaseDesgin:Microsoft-PetSop4.0(宠物商店)-数据库设计-Sql DatabaseName:PetShop(宠物商店) Model:宠物商店网站 T ...

随机推荐

  1. linux下搭建php的集成环境

    一个偶然的机会,在项目中需要搭建PHP的环境,由于PHP开发需要的东西比较多,像apache.mysql.PHP环境等,如果一个一个装很可能会有安装不全的问题,为此选择了安装集成环境,这里选择的是xa ...

  2. # 关于Apache的25个初中级面试题

    注:本文从自己的Markdown博客复制出,除标题字体加粗.代码风格改变.图片重新上传外其余均为markdown语法. 标签(空格分隔): LAMP --- 原文:[关于Apache的25个初中级面试 ...

  3. 点击div全选中再点击取消全选div里面的文字

    想做一个就是点击一个div然后实现的功能是div里面的文字都成选中状态,然后就可以利用浏览器的自带的复制功能,任意复制在哪里去了 在网上百度了一下 然后网上的答案感觉很大的范围 然后一些搜索 然后就锁 ...

  4. jPList – 实现灵活排序和分页功能的 jQuery 插件

    jPList 是一个灵活的 jQuery 插件,可以用于任何 HTML 结构的排序,分页和筛选.它支持的数据源包括:PHP + MySQL,ASP.NET + SQL Server,PHP + SQL ...

  5. js控住DOM实现发布微博简单效果

    这段代码的效果具体是输入标题和内容,点击发布把消息发布出去,并使最新的消息始终在内容的最上面,代码为: <!DOCTYPE html> <html lang="en&quo ...

  6. Javascript 面向对象编程初探(一)--- 封装

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...

  7. 后台运行进程(background job)

    在一些日常业务中,总有一些长时间处理的任务,系统运行这些任务需要一晚甚至一个周末. 这就需要后台运行单元(background work process)来完成,而且其是不会发生超时(time out ...

  8. sharepoint2013的最少下载策略概述(MDS)

    该策略是 SharePoint 2013 中的一种新功能,通过在用户导航到新页面时仅发送差异内容来减少页面加载时间. 最少下载策略 (MDS) 是 SharePoint 2013 中的一种新技术,可减 ...

  9. SPS中使用JSOM发邮件

    直接上代码了: function ShowMailDialog() { $.ajax({ url: siteurl + "/_api/contextinfo", method: & ...

  10. ubuntu 12.04 react-native 安装

    1.安装nodejs 和npm apt-get install nodejs apt-get install npm 2. 升级node js 和npm sudo npm cache clean -f ...