四小时学习opencv+qt系列(第二天)
每天四小时学习opencv+qt系列(第二天)
顺便提一下,我觉得收获最大的就是上一篇博客中使用到的QSettings这个类,可以对设置进行保存与初始化,而我原来没有用到这个类的时候用的是将设置保存在本地自己创建的.db的文件,然后再用QSQLITE来进行数据库的读取操作,这样的话还需要考虑存储方式以及类型转换,还要加上逻辑的控制,直接用QSettings他会自动的给你存了,很好。
一、优化上次一的opencv+qt程序
1.书中的第三章是创建完整的Qt+opencv项目,其实就包括了资源文件的添加和样式的设置,针对上一章节写的程序首先进行了pushbutton的样式改变,在styleSheet加入了以下代码:(注:第一行是我加入的调节字体样式)
font: 12pt "黑体";
border:2px solid #2222202;
border-radius:10px;
background-color:#9999ff;
min-width:80px;
min-height:35px;
代码分析:设置了背景色,圆角的样式。效果图:
这种方式要针对每个控件去设计他的样式,接下来书中使用级联的方式对所有的控件进行了样式设定。删除之前设置的样式,再MainWindow窗口的styleSheet中设置:
*
{font:75 11pt;background-color:rgb(220,220,220);
}
QPushButton,QLineEdit,QGroupBox
{border:2px solid rgb(0,0,0);border-radius:10px;min-width:80px;min-height:35px;
}
QPushbutton
{background-color:rgb(0,255,0);
}
QLineEdit
{background-color:rgb(0,170,255);
}
QPushButton:hover,QRadioButton:hover,QCheckBox:hover
{color:red;
}
QPushButton:!hover,QRadioButton:!hover,QCheckBox:!hover
{color:black;
}
代码分析:首先设置了字体大小和背景颜色,然后给QPushButton,QLineEdit,QGroupBox设置了圆角边框接下来再逐一设置他们之间不同的属性,有一个亮点是控件的伪状态设置很好,“:”表示伪状态,只要当你的鼠标触碰上去但没有点击控件字体颜色就会变为红色。这个很好,有一个提示的作用。
效果图:
2.接下来的代码讲到了多语言支持,有两种方法,书上介绍不怎么清晰,我总结一下
三个步骤:
1.生成.ts文件
2.翻译,生成.qm文件
3.加载.qm文件
首先在.pro文件里面加入:
#英文、中文
TRANSLATIONS=translation_en.ts \
translation_cn.ts
然后通过下图操作来实现:
还可以通过qt自带的命令行:
cd/d D:\program\Qt\Qt5+opencv\01_qt_opencv
lupdate -verbose 01_qt_opencv.pro
可以在工程目录下看到:
接下来翻译,使用自带的Qt语言家:
这里要手动的翻译。。。对应他检测出来的控件英文进行翻译,点击文件—>打开,选择对应文件选择翻译的对应语言,问号变为黄色证明翻译过了,最后点击文件—>发布。在工程目录下生成了.qm文件。项目原来就是英文,生成英文的.qm文件就直接照着是啥就copy在下面,然后发布,第一张图打开的是translation_cn.ts,第二张图打开的是translation_en.ts
现在生成了.qm文件我们就是用qt添加资源的方式添加.qm文件,添加成功后工程目录如下图所示:
接下来使用QTranslator类来赋予应用程序多语言功能,并进行语言的切换。
首先在mainwindow.h中声明两个私有的QTranslator对象,用到了类加入头文件:
#include<QTranslator>private:QTranslator *Chinese_translator;QTranslator *English_translator;
在mainwindow.cpp在构造函数中的加载设置之后加入下面代码:
Chinese_translator=new QTranslator(this);Chinese_translator->load(":/translations/translation_cn.qm");English_translator=new QTranslator(this);English_translator->load(":/translations/translation_en.qm");
在ui界面添加菜单和选项,右击下图中黄色区域,转到槽triggered()
编辑槽函数,因为界面一开始我设置的是英文为初始默认语言,所以在英文的slot里要进行的是移除中文样式。
由此举一反三,如果是十种语言,那么默认语言的槽函数里就是remove所有的添加的翻译。
void MainWindow::on_actionEnglish_triggered()
{qApp->removeTranslator(Chinese_translator);
}void MainWindow::on_actionChinese_triggered()
{qApp->installTranslator(Chinese_translator);
}
接下来就是写changeEvent()事件,操作和重写关闭事件差不多。
mainwindow.h
void changeEvent(QEvent *event);
mainwindow.cpp
void MainWindow::changeEvent(QEvent *event)
{if(event->type()==QEvent::LanguageChange){ui->retranslateUi(this);}else{QMainWindow::changeEvent(event);}
}
代码分析:语言改变触发changeEvent事件,如果改变了则重新翻译,没有的话正常显示原来的。测试了可以,但是再优化一下就会更好,加几个弹簧。布局如下:
接下来我本来应该进入插件的学习,但是,这个程序既然完成了,我就给他打包发布成直接用来安装的程序setup.exe。
二、程序打包及发布
1.首先第一步再release下运行生成exe文件,再把这个exe文件单独copy到一个文件夹,利用qt自带的打包工具打包。
找个ico图标,放在工程目录下,我的ico图标名字叫做1.ico,在.pro文件里加入下面代码后运行:
RC_ICONS=1.ico
release下运行记得把.pro文件里的opencv_word420d的d去掉
把exe文件copy到新的文件夹进行一个重命名,再用windeployqt打包。如下图然后回车:
打包完成后其实并没有结束,虽然你运行肯没有问题,但是换台电脑就不一定,因为环境不同,接下来copy一些文件到工程目录,如下图操作。黄色标注的是容易漏的文件要检查一下。
2.使用inno setup软件将他打包成一个可以安装的setup.exe,接下来跟着截图:
运行完成后关闭这个界面,打开下图中的iss文件,再次Run
下面便是生成的setup.exe给什么都不装的电脑可以直接用。
由于我设置了安装密码,安装时输入qt520opencv才能安装。如果我的博客对你有帮助,点个赞吧,明天继续更新,我学习的书是《OpenCV3和Qt5计算机视觉应用开发》,博客中还会加入一些个人的想法,代码理解,以及书中没有讲到一些关于qt的东西,欢迎关注,互相交流学习。计划十五天学完这本书,和我一起加油吧。
四小时学习opencv+qt系列(第二天)相关推荐
- 四小时学习opencv+qt系列(第六天)
四小时学习opencv+qt系列(第六天) 一.图形视图框架 三大类:场景(QGraphicsScene类)视图(QGraphicsView类)图形对象元素(QGraphicsItem及其子类) 1. ...
- “睡服”面试官系列第二篇之promise(建议收藏学习)
目录 1promise的定义 2基本用法 3. Promise.prototype.then() 4. Promise.prototype.catch() 5. Promise.all() 6. Pr ...
- 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)
相关系列链接 焱老师带你学习MYSQL系列 第六篇 (MYSQL是如何实现锁的) 焱老师带你学习MYSQL系列 第五篇 (MYSQL事务隔离级别是如何实现的) 焱老师带你学习MYSQL系列 第四篇 ( ...
- 奋斗的小孩系列 FPGA学习altera系列: FPGA学习altera 系列 第二十一篇 数码管设计
奋斗的小孩系列 FPGA学习altera系列: FPGA学习altera 系列 第二十一篇 数码管设计 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是 ...
- 学习OpenCV 第二版1-4:The Origin of OpenCV
大家可以到这里下载英文原版:http://download.csdn.net/download/zleisure/7451051(下载时请看下资源简介) OpenCV起源 OpenCV诞生于Intel ...
- 学习OpenCV的学习笔记系列(三)显示图片及视频
OpenCV是计算机视觉库,那么处理的对象无非两个:"图片"及"视频"(其实视频也是被解压成单帧图像来处理的,总的来说,还是处理图像). 那么要想学习OpenC ...
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- 【从零学习OpenCV 4】4种读取Mat类元素的的方法
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
- 【从零学习OpenCV 4】Mat类构造与赋值
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
最新文章
- java 锁_Java 锁之我见
- 如何识别一个人是web前端程序员
- smoothstep
- No module named 'django.core.urlresolvers
- idea—开启Run DashBoard
- 常用的hooks入门
- php 异步执行shell脚本
- php和vue实现智商在线测试题
- 十天学会php之第八天
- 网易互娱2020游戏研发实习生笔经面经
- 小米手机自带红外传感器安卓应用程序代码
- 公钥加密、数字签名、消息认证
- FFmpeg添加x265/hevc编码器支持
- 呼叫中心新座席必修课
- 淘宝中所说的sku是什么
- C++_输入一个字符串,并逆序输出
- java自定义标签库的开发
- repo 忽视本地修改,强制恢复初始
- xfs文件系统损坏修复
- 腾讯市值1个月蒸发1700亿美元;微软发布Windows 11 首个Beta版本; 恶意程序开发者转向新兴编程语言 | 架构视点...