文章目录

  • Qt操作Office的一个实例--口算题生成器制作。
    • 1、关联QAxObject
    • 2、操作Word文档:
    • 3、设计界面
    • 4、关键代码
    • 效果:

Qt操作Office的一个实例–口算题生成器制作。

学校里经常会要求口算达标。如果手写口算题效率太慢,何不用Qt做一个口算生成器呢?

虽然Qt自带文本编辑功能,不过这次还是想尝试操作COM对象来实现。

于是从网上下载一个文档QWord.cpp 来了解Qt操作COM对象的方法。

粗略分析了QWord.cpp 的文档,基本了解如下:

1、关联QAxObject

要操作office需要 include <ActiveQt/QAxObject>,同时QT += axcontainer

什么是QAxObject ?

QAxObject 类提供了封装COM对象的一些操作。

QAxObject可以被实例化一个空的对象,或者指向COM组件的一个指针。如果这个COM对象提供了IDispatch接口。那么该COM对象的属性、方法和事件可以通过Qt的属性、槽、信号来实现。

例如:初始化一个COM对象:

QAxObject* m_word;m_word = new QAxObject(parent);

2、操作Word文档:

这里引用一段代码文档

void QWord::setPageOrientation(int flag) //设置页面1 横向   还是0竖向
{   QAxObject* selection = m_word->querySubObject("Selection");   //返回当前选定COM对象的指针、if(NULL== selection){return;}QString page;switch (flag){case 0:page = "wdOrientPortrait";break;case 1:page = "wdOrientLandscape";break;}selection->querySubObject("PageSetUp")->setProperty("Orientation",page);//设置Page的横向或者竖向的属性。
}

从上段代码中可以发现:用Qt可以很方便的操作word文档的属性。

3、设计界面

在了解了word 操作之后,我们接着来实现口算生成器的界面


这里我们设置加减乘除四项运算。设置两个运算数的最大值和最小值。设置得数的上限,设置试题的份数。

4、关键代码

#include "mainwindow.h"
#include "ui_mainwindow.h"#include "Word/qword.h"
#include <QDateTime>
#include<QDir>
#include<qrandom.h>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);minValue = 1;   //最小值maxValue = 10;   //最大值maxResult = 100;  //结果上限pages = 1;      //生成的份数_addEn  = true;_minusEn = true;_mulitEn = true;_divideEn = true;}MainWindow::~MainWindow()
{delete ui;
}//生成快题
void MainWindow::on_pushButton_produce_clicked()
{QString current_Date_Time = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");QString fileName = tr("口算训练习题")+"_" + "_" + current_Date_Time;fileName.replace("-", "");fileName.replace(":", "");fileName.replace(" ", "");QString filePath = "";QDate Cur_Date= QDate::currentDate();QString strCurDate = Cur_Date.toString("yyyy-MM-dd");filePath = "E:/demo/QWordDemo/ReportWord/"+strCurDate+"/";QDir dirReportPath(filePath);if (!dirReportPath.exists()){if (dirReportPath.mkpath(filePath)){filePath += fileName + tr(".doc");}}else{filePath += fileName + tr(".doc");}QWord word;if( !word.createNewWord(filePath) ){QString error = tr("Failed to export exercise,") + word.getStrErrorInfo();return;}word.setPageOrientation(0);          //页面方向word.setWordPageView(3);          //页面视图for(int p = 1;p<= pages;p++){word.setParagraphAlignment(0);        //下面文字位置word.setFontSize(30);               //字体大小word.setFontBold(true);               //字体加粗word.insertText(tr("口算训练习题( ")+QString::number(p)+ " )");word.setFontBold(false);word.insertMoveDown();word.setFontSize(12);word.setParagraphAlignment(2);// QString current_Time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");word.insertText(tr("日期________________ 时间________________ 分数________________"));word.insertMoveDown();word.insertMoveDown();QString str = "";word.intsertTable(20,4);for(int row = 1;row<=20;row++){//for(int colum = 1;colum<=4;colum++){word.setColumnHeight(colum,25);str.clear();QTime time;time= QTime::currentTime();qsrand(time.msec()+time.second()*1000);qrand();qrand();nums0=qrand()%(maxValue - minValue) + minValue;nums1=qrand()%(maxValue - minValue) + minValue;while(DoOperation())str.clear();str = QString::number(nums0)  + operator_str + QString::number(nums1) + " =";word.setCellString(p,row,colum,str);}word.setRowAlignment(p,row,3);word.setRowHeight(p,row,35);}word.setTableAutoFitBehavior(0);word.moveForEnd();}word.setVisible(true);word.saveAs();
}bool MainWindow:: DoOperation()
{bool loopflag = true;QTime time;time= QTime::currentTime();qsrand(time.msec()+time.second()*1000);qrand();int var = qrand()%4 + 1;switch (var) {case 1:loopflag = (_addEn==true)?false:true;if(!loopflag){operator_str = " + ";}break;case 2:loopflag = (_minusEn==true)?false:true;if(!loopflag){operator_str = " - ";}break;case 3:loopflag = (_mulitEn==true)?false:true;if(!loopflag){operator_str = " × ";}break;case 4:loopflag = (_divideEn==true)?false:true;if(!loopflag){operator_str = " ÷ ";}break;default:loopflag = true;break;}return loopflag;
}void MainWindow::on_checkBox_add_clicked(bool checked)
{if(checked){_addEn = true;}else{_addEn = false;}
}void MainWindow::on_checkBox_multi_clicked(bool checked)
{if(checked){_mulitEn = true;}else{_mulitEn = false;}
}void MainWindow::on_checkBox_minus_clicked(bool checked)
{if(checked){_minusEn = true;}else{_minusEn = false;}
}void MainWindow::on_checkBox_divide_clicked(bool checked)
{if(checked){_divideEn = true;}else{_divideEn = false;}
}void MainWindow::on_spinBox_minValue_valueChanged(int arg1)
{minValue = arg1;
}void MainWindow::on_spinBox_maxValue_valueChanged(int arg1)
{maxValue = arg1;
}void MainWindow::on_spinBox_maxResult_valueChanged(int arg1)
{maxResult = arg1;
}void MainWindow::on_spinBox_pages_valueChanged(int arg1)
{pages = arg1;
}

效果:

Qt操作Office的一个实例--口算题生成器制作。相关推荐

  1. python小学生口算题生成器_小学数学题出题神器

    小学数学题生成器是一款简易的小学数学题目出题神器,目前支持20以内的加减混合运算,未来会更新更多的功能.对于想要在家给孩子练习的家长来说,还是比较方便的,而且能够打印. 软件介绍 今年儿子刚上一年级, ...

  2. php自动生成小学生口算题程序生成器

    闲着无聊写了一个小学生口算题生成器  php的  简单易用  省着家长们 每天手写出题了 适用范围:小学2年级到4年级上学期 课后作业练习使用 程序的出题的规范要求: 1.符号前后为100以内的整数 ...

  3. Python实验——生成小学生口算题

    tkinter 小学数学口算题生成器 实验说明: 在小学一.二年级,只能口算 20 以内整数的加.减法:三.四年级可以口算超过 20 的整数四则运算:五年级以上可以口算带括号的式子. 编写程序,批量生 ...

  4. Qt 操作words实例 --- 幼儿快算题生成器

    Qt 操作words实例 - 幼儿快算题生成器 幼儿教育一直受到重视,一年级开始,一般学校都会要求口算达标,为了更好的促进孩子学习,是否可以制作这样一款word 口算练习题生成器呢?不妨用Qt来试试看 ...

  5. 基于Python和Java混合编程实现的小学生数学口算题卡定制练习题

    1. 总体要求 综合运用软件工程的思想,协同完成一个软件项目的开发,掌软件工程相关的技术和方法: 组成小组进行选题,通过调研完成项目的需求分析,并详细说明小组成员的分工.项目的时间管理等方面. 根据需 ...

  6. # 异运算_一年级数学:3000道20内纯进、退位口算题,每天100道日新又月异

    孩子上小学一年级就要正式接触数学,通过数学上学期的学习,基本上10以内的加减法可以解决了,但是还不够熟练.到了一年级数学下学期,就要解决20以内的加减法了.我们大人觉得这些都很简单,但是孩子不同,他们 ...

  7. python怎么编写口算题_来出口算题—— Python编程

    原标题:来出口算题-- Python编程 今天,小编带大家做一个实用的小程序,也就是计算题生成器. 低年级的小朋友,最需要提高的就是计算能力,而计算能力的提升离不开有效的练习,而手动出题总会有局限性, ...

  8. 小学生计算/口算题excel打印版,计算机出题,解放大人

    [推荐]2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 老师要求孩子练习数学口算题,网上找了几个出题软件,感觉不是很满意,特别是打印格式十分不爽 正好闲来无事,现学现 ...

  9. 【杂记】从孩子口算题开始逐渐离谱

    文章目录 一. 背景 二.初步实现 main.cpp creater.h creater.cpp 三.优化 修改内容: creater.h creater.cpp 四.复杂化 main.cpp cre ...

最新文章

  1. 【opencv】3.在一个opencv窗口中显示多个视频界面、画箭头、画掉头箭头
  2. Qt三种方式实现FTP上传功能
  3. c# datatable用法总结
  4. 揭秘!如何用Flutter设计一个100%准确的埋点框架?
  5. 曾比海底捞还牛,如今关店1200家!肯德基的猪队友,快被中国人抛弃了?
  6. Seata-Server安装_以及工作原理---微服务升级_SpringCloud Alibaba工作笔记0058
  7. linux docker自动启动,linux – Cron作业不能在Docker容器内自动运行
  8. java-用cmd运行java命令
  9. linux 卸载java jdk1.6_Linux 下安装与卸载JDK(jdk-6u16-)
  10. 计算机硬盘大小一般都是整数,电脑硬盘怎么精准整数分区
  11. 众多时间时钟Flash动画素材一键即可获取
  12. 4级网络工程师第5套知识点
  13. 华三交换机怎么关闭445端口通信
  14. VUE2.X全教程--基础详解(二)
  15. 通信协议:CAN总线
  16. NGS测序数据和Microarray芯片数据在基因表达中的应用
  17. 在日本转职需要到入管办理转职手续
  18. MySQL 服务无法打开的解决方法
  19. 编译原理 —— 逆波兰式
  20. 知乎 API v4 整理

热门文章

  1. python的setup.py文件及其常用命令
  2. case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断
  3. crtlc不能复制文件_ctrl+c不能复制怎么办
  4. python3中map函数_python3中map()和reduce()函数
  5. CFNet:End-to-end representation learning for Correlation Filter based tracking
  6. 一文读懂什么是C++移动语义《一》
  7. BugkuCTF-Misc:Linux
  8. BugkuCTF-Misc:come_game
  9. 如何撤销正在审核的苹果app?
  10. 批处理以当前时间为文件名创建文件