技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 138|回复: 5
收起左侧

我的第一个GUI程序

[复制链接]

11

主题

100

帖子

738

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
557 个
贡献
44 次
宅之契约
0 份
在线时间
90 小时
注册时间
2018-5-6
发表于 2018-10-30 01:09:03 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
本帖最后由 watermelon 于 2018-11-1 15:01 编辑

前两天老师要我们来翻译英文文献,我下载了有道翻译的软件,发现它在进行翻译文档,翻译完毕以后是要花5元钱来导出文档的,我想这个也太.....。
所以小弟我就想自己写一个简单的借助有道翻译引擎来翻译的GUI程序。

我之前有接触过Qt5,做界面我比较喜欢Qt5(对初学者很友好),翻译的引擎用的有道翻译,使用python脚本爬下来,然后把python脚本嵌入到C++中。
说实话这个嵌入还是很有意思的,python3中把slot当做关键字,而Qt中的SLOT和slots也是有意义的,所以还要小小的改动一下。在嵌入过程中发现
使用fanyi.py这个脚本的函数和使用DLL中的导出函数的步骤很像。由于python无处不对象,所以在混编的时候还要对参数进行整合传给python,然后
解析传出来给C++写的界面用。

期间还有一个很有意思的事情,就是在选择要翻译的文件的时候,信号要选择triggered,而不是clicked,因为自定义的信号与槽在编译的时候会让clicked
信号作用两次,怪不得我之前一直是弹出两个对话框,我对自己调出这个bug还是很高兴的。

由于Qt做的程序在动态编译的情况下本来就不好打包发布(要携带很多dll),无论是windeployqt.exe还是静态编译,我还把python36.dll带上了,但是这两种方法
就是都没有办法在没有python的机器上运行,一点击“开始翻译”按钮就闪退,但是在自己的电脑上就运行的很好,这个就很恼火了。

最后我还是截几张图来纪念一下这个特殊的日子,UI的确我感觉也是挺丑的,下面我也会多看一些书籍来弥补这方面的知识的。
希望各位大佬多多指正。


README.txt内容:
[C++] 纯文本查看 复制代码
1.由于本软件的编写用的Qt框架,C++,Python3.6混编,但是最后的exe真的出不来(真的恼火)。
无论是静态编译或者是动态编译后添加DLL文件,Python3.6总是会在按下“开始翻译”按钮的时候闪退。
但是在我的机器上是可以完美运行的(因为我有Python3.6的解释器)

2.本软件界面部分用的Qt框架,C++编写,核心是源文件translation中的fanyi.py文件,该文件用于爬取有道翻译网页版的翻译结果。

3.本软件仅供学习交流使用,严禁用于商业用途,最终解释权给网易-有道翻译所有。

4.由于python字符集和Qt字符集的问题,只能是英译中,并且英文中尽量不要出现标点(如果有也要是英文的),同时建议翻译的句子不要过大,以免降低翻译精准度。

5.希望各位大佬多多指正我,只有交流才会进行更好的发展。

6.协议的界面的左半部分图片和软件图标来自互联网,由于网络原因暂时无法找到原作者,深感抱歉,请原作者看到联系我(QQ:2015572934),侵权即删。

								---watermelon




源码下载:https://github.com/trace-shadow/Watermelon_translate

协议

协议

选择文件

选择文件

翻译结果

翻译结果

程序图标 致敬Avicii

程序图标 致敬Avicii

Watermelon.zip

78.96 KB, 下载次数: 1

评分

参与人数 1威望 +8 宅币 +32 贡献 +16 收起 理由
0xAA55 + 8 + 32 + 16

查看全部评分

菜鸟一枚,直接指正,不必留情

1007

主题

2232

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
199
威望
263 点
宅币
16684 个
贡献
33359 次
宅之契约
0 份
在线时间
1595 小时
注册时间
2014-1-26
发表于 2018-10-30 07:10:41 | 显示全部楼层
又见Qt
回复

使用道具 举报

11

主题

100

帖子

738

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
557 个
贡献
44 次
宅之契约
0 份
在线时间
90 小时
注册时间
2018-5-6
 楼主| 发表于 2018-10-30 11:56:42 | 显示全部楼层

哈哈,谢谢站长鼓励
菜鸟一枚,直接指正,不必留情

11

主题

100

帖子

738

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
557 个
贡献
44 次
宅之契约
0 份
在线时间
90 小时
注册时间
2018-5-6
 楼主| 发表于 2018-10-30 11:58:26 | 显示全部楼层
还是发一下调用python脚本的那段函数,真的和从dll中调用导出函数有相似的行为:
首先要#include <Python.h>
代码如下:
[C++] 纯文本查看 复制代码
//借助python脚本fanyi.py来进行翻译
void MainWindow::use_youdao_translate()
{
    //初始化python模块
    Py_Initialize();
    if(!Py_IsInitialized())
    {
        QMessageBox::critical(NULL, "Error1", "Please get in touch with the Watermelon,sorry.",
                              QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        return;
    }

    //导入fanyi.py文件
    PyObject *pModule = PyImport_ImportModule("fanyi");
    if(!pModule)
    {
        QMessageBox::critical(NULL, "Error2", "Please get in touch with the Watermelon,sorry.",
                              QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    }

    //获取fanyi模块中的get_translation_result函数
    PyObject *pGTResult = PyObject_GetAttrString(pModule,"get_translation_result");

    if(!pGTResult)
    {
        QMessageBox::critical(NULL, "Error3", "Please get in touch with the Watermelon,sorry.",
                              QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    }


    //开始调用get_translation_result函数
    QString origin = ui->origin_textEdit->toPlainText();         //获取原文中的内容
    //将换行符替换成*字符,因为原脚本只能爬取没有换行符的字符串
    origin.replace('\n','*');

    char *str = NULL;
    QByteArray ba = origin.toLatin1();
    str = ba.data();                          //将QString转化为char *

    PyObject *pRet = PyObject_CallFunction(pGTResult,"s",str);

    //获取python的返回值
    char *res = NULL;
    PyArg_Parse(pRet,"s",&res);

    //将返回的结果转化成QString类型
    QString result = res;
    result.replace('*','\n');               //将输出格式换回来,我真聪明
    ui->translate_textEdit->setPlainText(result);

    //结束,释放python
    Py_Finalize();
}

菜鸟一枚,直接指正,不必留情

1007

主题

2232

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
199
威望
263 点
宅币
16684 个
贡献
33359 次
宅之契约
0 份
在线时间
1595 小时
注册时间
2014-1-26
发表于 2018-11-1 14:41:20 | 显示全部楼层
说起来有个问题,你的“协议”那个界面上的画,是你自己的吗?如果不是,你获得授权了吗?

11

主题

100

帖子

738

积分

用户组: 大·技术宅

UID
3808
精华
1
威望
16 点
宅币
557 个
贡献
44 次
宅之契约
0 份
在线时间
90 小时
注册时间
2018-5-6
 楼主| 发表于 2018-11-1 14:57:43 | 显示全部楼层
0xAA55 发表于 2018-11-1 14:41
说起来有个问题,你的“协议”那个界面上的画,是你自己的吗?如果不是,你获得授权了吗? ...

报告,那个图不是我字节的,是网上的,不知道怎么获取授权,这么一说的确是有些欠妥,我还是把那个ReadMe.txt再改一下
菜鸟一枚,直接指正,不必留情

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-11-20 13:41 , Processed in 0.084487 second(s), 15 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表