Qt

嵌入式: 偏应用,即偏某一应用或者作用开发,省去其他的的硬件。

实验箱上面或者淘宝很多已经有了操作系统。

或者根据网址进入镜像放置系统。并且实训也会操作,

 

 

 

 

前期准备

安装虚拟机 ubuntuVM中,配置虚拟机的配置,网络,网络本机互连是注意不仅ip相等,还有子网掩码等一致。

下载QTputty等软件,QT还有一系列的执行,qmake等,

ubuntuifconfig -a

本地pc实是ipconfig

 

 

密码为123456123

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界面的信号和槽

 

 使用自定义封装

比如封装一个spinBoxslider

 

在主界面先加一个Wiget

然后右键

 

添加写封装类

 

原文地址:https://www.cnblogs.com/yangj-Blog/p/14221800.html