感悟与经验

  • 实习第一个感悟
  • QT快速入门方法
    • 前期基础篇
    • 发展篇
    • 实际开发篇
      • 字符串切割
      • Tab页的隐藏
  • 结语

实习第一个感悟

我从投简历开始到入职一共花了大概两周不到的时间,没有什么诀窍,就是海投,我投递了实习僧和BOSS上目标城市的所有C++和QT的实习岗位,一共获得了三家的面试的机会,一家非常小的公司,一家独角兽AI公司(非常遗憾没有通过面试,自己的代码能力还是太菜),和现在入职的这家还比较大的公司,在智驾部门,还是非常满意的。
我已经实习一个月有余,岗位是软件开发 主要是用QT负责界面开发,目前我接触的QT的工作和前端类似,主要就是负责开发一款仿真软件的某一部分界面。如果大家像我是一个非科班毕业即将攻读软件工程硕士的准硕士或者想通过比较短的一段时间的学习就能找到实习,并且后期还有时间进行其他实习,我觉得QT是一个比较快能够入门并找到实习感受程序员工作方式的一门不错的框架吧。
原因有以下几点吧:第一,比较容易上手;第二,工作和前端有点相似,可以感受前端的工作方式;第三,后期也可能会用到,是一个不算冷门的框架。
今天主要就是介绍一下我是如何快速入门QT并找到实习的。另外就是讲一下我开发中遇到的两个实际问题,可能比较简单,主要是介绍一下我的思维过程吧。
后期会专门写一下最近我接触的和QT相关的技术点,希望对各位能有所帮助。

QT快速入门方法

前期基础篇

学习QT首先的首先是得会C++,如果在会C++的基础之上,学习QT入门,最多三天就可以搞定,如果你现在C++掌握得还行,就可以直接投QT岗位的实习了,边投边学一点问题没有。
好了,说一下具体的C++和QT的基础部分的学习:
首先,C++我推荐课程是黑马的C++课程,这个大概全力学习也得15天左右吧,然后可以辅以《C++ primer》或者《C++ primer plus》,听说plus要比前一个稍微基础一些,我没具体对比过,所以不太好作评价。主要重点学习基础语法和封装继承多态就行了,STL要了解一下。另外,就是QT的学习了,QT的学习一定要结合实际demo来学习,我推荐《QT5开发及实例》,这是一本非常不错的书,有非常多的实例和demo。然后课程的话我看的还是黑马的课,这个课很短,开2倍速播放都可以,主要是了解QT的编写风格和编码方式还有一些控件的使用,功能的实现。QT的核心就是控件的使用布局和功能的实现。最后,最重要的最重要的最重要的(有必要说三遍)就是官方的帮助文档,在这儿你能知道每一个控件,每一个函数具体怎么使用,真的是学习必备神器。另外,我入职之后导师给我的是一本霍亚飞的《Qt Creator 快速入门》这本书写得通俗易懂,非常适合 Qt 新手学习。这些看完了差不多就可以直接上手项目了。当然在公司中还包括从后台读取数据和其他比如图像处理,但不同的公司处理的方式不一样,这就不作介绍了,我们公司主要通过DOM读取XML,这个入职之后再学也非常的快。
学习资料总结
C++:
书籍《C++ primer》或者《C++ primer plus》
课程 黑马C++相关课程(官网和B站都有)
QT:
书籍 《QT5开发及实例》和《Qt Creator 快速入门》
课程 黑马QT课程
工具 官方帮助文档和CSDN相关博客

发展篇

如果学习完QT后,发现有一定的兴趣,可以尝试学习一些可以和QT搭配的其他框架或算法,如FFmpeg,OpenCV,OpenGL等,可以尝试做一个播放器。这个也是我在github上看到许多项目都是这几个相关的。这里我推荐一个项目吧,我觉得还不错。
链接: https://github.com/ithewei/hplayer.git.
这就是一个以上几个相结合的项目,非常适合上手学习。
然后就是可以学习了解QT相比C++的不同或改进之处。这个我后面会专门讲一下我了解学习到的源码或其他值得学习的东西。

实际开发篇

最后就是讲一下我在实际工作中遇到的两个小问题,是如何解决的。

字符串切割

第一个就是就是通过DOM读取了XML字符串后,需要取一个结点内的字符串中的不同数字填入不同的Table中,简单来说就是做一个字符串的切割,这个我最开始是不太会的,后来看了一些博客才知道可以用split+正则表达式来完成。
下面展示一些 具体代码

// 读取XML数据并完成切割
QString str=Element.attribute("value");
QVector <QString> s=str.split(QRegExp("[, ;\t\r\n]"),QString::SkipEmptyParts).toVector();//QRegExp("[]")填入切分的标志,SkipEmptyParts是忽略空格

这样就能得到想要的数据了。

Tab页的隐藏

另外一个小问题就是:显示和隐藏一个tabwidget中的部分tab页,最开始我尝试了hide发现并没有类似的接口(因为tab不是QWidegt),使用removeTab()固然可以做到,但是这样的话我们再次需要显示这些tab时再把它们加进去,有时候计算index会很麻烦。所以有没有什么办法可以在不删除tab的前提下隐藏掉某些tab呢,这样就能避免再次添加tab和计算index的麻烦。最后发现利用QTabWidget::setTabEnabled()接口与QSS来共同实现隐藏tab。
setTabEnabled()很容易理解,可以在不需要使用某些tab时将其禁用掉。但是禁用掉tab并不会使其隐藏,这时就需要QSS出马了。QSS实际上也不能隐藏tab,但它可以把处于禁用状态的tab宽度设为0,同时将文字颜色设为透明,然后就看不到这个tab了,这样就间接达到了隐藏的目的。
下面展示一些 具体代码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);const int originalTabNum = ui->tabWidget->count();const int tabNum = 10;for (int i = 0; i < originalTabNum; i++){ui->tabWidget->removeTab(0);}for (int i = 0; i < tabNum; i++){ui->tabWidget->addTab(new QWidget(this), QString::number(i));}ui->comboBox->addItem("13579");ui->comboBox->addItem("02468");ui->comboBox->addItem("159");ui->comboBox->addItem("048");
}Widget::~Widget()
{delete ui;
}void Widget::on_comboBox_currentTextChanged(QString text)
{const int textLen = text.length();const int tabNum = ui->tabWidget->count();for (int i = 0; i< tabNum; i++){ui->tabWidget->setTabEnabled(i, false);}for (int i = 0; i < textLen; i++){bool ok = false;int index = text.mid(i, 1).toInt(&ok);if (ok){ui->tabWidget->setTabEnabled(index, true);}}/** 似乎由于tab并不是QWidget的缘故,需要每次在对显示的tab进行调整后,调用setStyleSheet使其生效*/ui->tabWidget->setStyleSheet("QTabBar::tab:disabled {width: 0; color: transparent;}");
}

在改变QComboBox被选择的item后,会根据当前item的text而显示或隐藏某些tab。先使用setTabEnabled()禁用需要隐藏的tab,然后调用setStyleSheet()将禁用的tab宽度设为0,文字颜色设为透明。
效果图如下:

当然还有些细节需要注意,一个是如果之前被选择的tab如果被禁用掉的话,它不会自动重新选择一个可用的tab,这个需要手动处理;另一个是如果仔细观察的话,tab之间有一个隐藏的tab的话对显示样式会有细微的影响,最左侧和最右侧最为明显(可能会少一个边框)。

结语

后面我会自己写或者转载一些我学习到和QT源码相关的知识,希望能和大家相互交流学习,同时也希望通过知识的输出加深印象。如果有什么错误的地方还希望大家指出或相互讨论。

我的coding之路--实习第一个月的感悟 和 QT 入门方法相关推荐

  1. Python之路【第一篇】:Python简介和入门

    Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...

  2. java后端实习第一个月总结

    java小白实习第一个月踩坑记录 前几天熟悉公司各种办公设备,及项目框架流程,先帮写人接口文档,可以熟悉代码.然后开始写自己的第一个简单接口,写完再swageger自测,自测完测试在测,然后和前端对接 ...

  3. 实习第一个月体会和总结

    今天第一次在写博客,感觉还是挺激动的.下面讲述一下我找工作,然后入职,然后工作一个月的个人体会,也可以给其他没有找到工作的小伙伴们一些经验! 我是一名2018届的二本院校应届生,专业是软件设计,因为学 ...

  4. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  5. 大三专科实习第一个月——HTTPS底层原理详解

    简介:脱变从现在开始,以上文章讲述的是广度问题接下来方向将是深度的问题.觉得我还可以的可以加群探讨技术QQ群:1076570504 个人学习资料库http://www.aolanghs.com/ 微信 ...

  6. 大三专科实习第一个月——Socket底层原理详解与应用

    简介:脱变从现在开始,以上文章讲述的是广度问题接下来方向将是深度的问题.觉得我还可以的可以加群探讨技术QQ群:1076570504 个人学习资料库http://www.aolanghs.com/ 微信 ...

  7. 第一次实习第一个月总结

    目录 准备和面试 实习日志 分享一些上班日常

  8. 亚马逊知识局:亚马逊新品第一个月应该如何运营推广?

    做过亚马逊的朋友想必都知道新品上架第一个月的重要性,在第一个月内,我们要控制好整体的推广节奏,按部就班进行产品推广,才可以使销量上来!所以东哥今天就是来跟大家分享一下自己的经验,亚马逊新品第一个月如何 ...

  9. 谈谈实习第一天的感受

    1.不知道别人实习第一天都是干啥呢,我们的第一天就是学习,学习C#的基础,JAVA和C#的基础不知道学了多少遍了,好吧又得重来一遍,感觉每次开始的时候都得来一遍基础,看来ji'c基础是真的重要, 2. ...

最新文章

  1. 解决Attempt to execute SCRIPT mexLasso as a function
  2. What you should do if you want to become more professional in career?
  3. 应用程序窗口hwnd初始化_Golang OpenGL 跨平台图形程序开发(2)你好,窗口
  4. vb6源码 ymodem_任意字符的ASCII码转换工具,基于VB6的源代码VB字符串处理源码下载...
  5. ldap seach java_从LDAP(Java)检索信息
  6. java8 javafx_Java8中的外观(JavaFX8)
  7. 腾讯offer是什么样子_月薪35K:2020腾讯Java后端开发详细面试流程
  8. 想当年,我也是斩获20+大厂offer的收割机!
  9. 面试官对我说:虽然你技术能力强,但是依然做不了架构师
  10. prometheus 筛选不同的cpu核心
  11. mapper.xml中注释问题
  12. html5好看的颜色代码,css好看的颜色配色.html
  13. 一点感悟: 詹姆斯与全栈工程师
  14. MP4视频转换器怎么样将FLV转MP4
  15. Cubase10.5稳定版安装包+安装教程
  16. Thinkpad和ThinkBook有什么区别 哪个好详细性能配置对比
  17. wcs开发_WCS 5.2的评论—用于Webcast和Webcam开发人员的WebRTC服务器
  18. queryWrapper详解
  19. idea 配置web项目图片无法显示问题
  20. 产品原则和产品评审团

热门文章

  1. 最近公共祖先(三种方法)
  2. 惯性导航系统(INS)与全球卫星定位系统(GPS)
  3. (二)遗传算法(Genetic Algorithm, GA)流程
  4. 麒麟信安电力行业信创解决方案获评首届长沙智慧城市“优秀解决方案”
  5. 使用H5 Canvas 在微信中合成海报(背景+logo+昵称)
  6. python reversed
  7. Unity3d坦克大战开发日志3(Day5,Day6)
  8. 河北主治还用计算机吗,河北中级工程师职称必须考计算机么
  9. 从DOOM到CE3 20年3D游戏引擎发展史漫谈
  10. 吉他mi指型吉他谱_我需要一个吉他老师。 所以我把我的Alexa变成了一个。