嵌入式: 偏应用,即偏某一应用或者作用开发,省去其他的的硬件。
实验箱上面或者淘宝很多已经有了操作系统。
或者根据网址进入镜像放置系统。并且实训也会操作,
前期准备
安装虚拟机 即ubuntu到VM中,配置虚拟机的配置,网络,网络本机互连是注意不仅ip相等,还有子网掩码等一致。
下载QT和putty等软件,QT还有一系列的执行,qmake等,
ubuntu是ifconfig -a等
本地pc实是ipconfig
密码为123456或123
ping的到本地pc,说明网络成功,
配置虚拟机即ubuntu好了之后才是和板子互连,写程序等
传文件
才是成功,如果不成功
1线问题
2传输的文件问题,比如直接传了一个exe文件,或者代码错误
3网络没配好
成功之后就是给权限,运行,
!QT creater
选基类
一.QMainWindow:
QMainWindow类提供一个带有菜单条,工具条和一个状态条的主应用程序窗口。主窗口通常提供一个大的中央窗口部件,以及周围菜单,工具条,和一个状态栏。QMainWindow窗口经常被继承,使得封装中央部件,菜单,工具条,状态栏等都变得很容易,当用户点击它的时候,相应的槽就会被调用。
二.QWidget
QWidet类是所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。一个窗口部件可以被他的父窗口或者是其他窗口挡住一部分。
三.QDialog
QDialog类是对话框窗口的基类,对话框窗口主要用于短期任务和用户进行短期通讯的顶级窗口,QDialog可以是模态对话框或者是非模态对话框。QDialog支持扩展并带有返回值,他们可以带有默认值
项目管理
项目注释
Exec()=下面的while(1)
常见的快捷键
#ifndef 和#define 下面的#endif 防止头文件重新编译
宏 !!Q_OBJECT
构造函数 和析构函数 参考
https://www.cnblogs.com/area-h-p/p/10316963.html
这里 是myWidget这个类
双冒号(::)用法
1.表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。
2.直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加::
3.表示引用成员函数及变量,作用域成员运算符
例:System::Math::Sqrt() 相当于System.Math.Sqrt()
4.命名空间作用域符,即2直接用在全局函数前,表示是全局函数
#include <iostream>
int main ()
{
std::cout << "hello, world!" << std::endl;
}
而双::后的:如上图为
类构造函数(Constructor)的初始化列表
在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号(,)隔开。下面举个例子。
class myClass
{
public :
myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
~myClass();// 析构函数
int a;
const int b;
}
myClass::myClass():a(1),b(1)// 初始化列表
{
}
上面的例子展示了冒号的这个用法,下面对这个用法进行几点说明:
1)初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。
在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两都的差别在对于像const类型数据的操作上表现得尤为明显。我们知道,const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,即下面的代码将会出错:
myClass::myClass()
{
a = 1;// 没错,效果相当于在初始化列表中进行初始化
b = 1;// 出错,const变量不能进行赋值操作;
}
2)初始化的顺序与成员变量声名的顺序相同。
先看一下下面的程序:
myClass::myClass():b(1),a(b)
{
}
这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
3)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明顺序进行初始化。
F1帮助文档或者旁边的?
QT中的对象树
QT有自动回收内存机制 当点击x的一刻
所以不用free这些new 的对象
重要的是必须在树上面,如setParent(this)即将按钮放在了Qwidget下面的myWidget下面了形成了一系列树节点,所以他的析构函数也被自动结束调用了 看下面的调式框就是界面x的一刻。
信号signal和槽slots机制
详细见创建的项目
匿名函数qt5.4一下版本需要在.pro文件中添加
而匿名函数格式为[](){}
当然这只是声明,要实现还要再加一个()如[](){}()
如
第一个[]为函数对象参数
如这样
就提示btn没有声明
第二个()为
第三个函数体
可以看到这个m是要修改的。必须在函数体前加上mutable才能修改
返回值如下
而这个匿名函数
如这时用&就会错 就是错的上图
而这个才对
匿名函数里面调用函数更加方便
QmainWindow
菜单栏
添加分割线
工具栏
导入#include<QToolBar>
不过默认的工具栏在上侧
这时候参考addToolBar的参数发现是有一个toolBarArea area的参数
点击文档找到参数
进入左侧
状态栏
对话框
选择资源文件
第一种
第二种
uI界面的信号和槽
使用自定义封装
比如封装一个spinBox和slider
在主界面先加一个Wiget
然后右键
添加写封装类