多线程
多线程QThread 线程类是实现多线程的核心类。 Qt 有两种多线程的方法,其中一种是继承 QThread的 run()函数,另外一种是把一个继承于 QObject 的类转移到一个 Thread 里。 Qt4.8 之前都是使用继承 QThread 的 run()这种方法,但是 Qt4.8 之后, Qt 官方建议使用第二种方法。两种方法区别不大,用起来都比较方便,但继承 QObject 的方法更加灵活。 所以 Qt 的帮助文档里给的参考是先给继承 QObject 的类,然后再给继承 QThread 的类。另外 Qt 提供了 QMutex、 QMutexLocker、 QReadLocker 和 QWriteLocker 等类用于线程之间的同步,详细可以看 Qt 的帮助文档
继承 QThread 的线程
run()方法是继承于 QThread 类的方法,用户需要重写这个方法,一般是把耗时的操作写在这个 run()方法里面
1234567891011121314151617181920212223242526272829303132333435363738394041424344454 ...
Qchart放大缩小曲线图
曲线图绘制qt的曲线绘制有三种类,分别是Qcustomplot、QChart、Qwt。
比较
美观方面:
Qcustomplot≈Qchart > Qwt
Qcustomplot界面简洁大方;
Qchart界面华丽优美,在数据量大的时候会引响鼠标的缩放、移动图表操作;
Qwt界面老旧,在美观上不如Qcustomplot和Qchart ,并且在使用鼠标移动图表时会产生空白区域。
性能方面:
绘制数据性能:Qchart>Qcustomplot > Qwt
绘制数据数量:Qcustomplot >Qchart> Qwt
绘制1000个数据点时,qcustomplot平均耗时 13.6毫秒,Qwt平均耗时40毫秒,QChart平均耗时12.5毫秒;
绘制10000个数据点时,qcustomplot平均耗时 21.6毫秒,Qwt平均耗时78毫秒,QChart平均耗时13.5毫秒;
绘制100000个数据点时,qcustomplot平均耗时22.5毫秒,Qwt平均耗时524毫秒,QChart平均耗时20.7毫秒;
绘制500000个数据点时,qcustom ...
Qt容器
容器各个控件的名称依次解释如下。(1) Group Box:组框
QGroupBox 为构建分组框提供了支持。分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。布局时可用作一组控件的容器,但是需要注意的是,内部通常使用布局控件(如 QBoxLayout)进行布局。
(2) Scroll Area:滚动区域
滚动区域用于在框架中显示子部件的内容。如果小部件超过框架的大小,视图就会出现滚动条,以便可以查看子小部件的整个区域。
(3) Tool Box:工具箱
QToolBox 类提供了一列选项卡小部件项。工具箱是一个小部件,它显示一列选项卡在另一列的上面,当前项显示在当前选项卡的下面。
(4) Tab Widget:标签小部件
abWidget 类提供了一组选项卡(多页面)小部件。 QTabWidget主要是用来分页显示的,每一页一个界面,众多界面公用一块区域,节省了界面大小,很方便的为用户显示更多的信息。
(5) Stacked WIdget:堆叠小部件
QStackedWidget 类提供了一个小部件堆栈,其中一次只能看到一个小部件,与 QQ ...
界面跳转设计
Qt中的lambda表达式跳转界面前先学习一个知识点是lambda表达式。
Lambda我们可以将其理解为一个未命名的内联函数。与任何函数类似,一个lambda具有一个返回类型,一个参数列表和一个函数体。但与函数不同,lambda可能定义在函数内部。一个lambda表达式具有如下形式:[capture list] (parameter list) ->return type {function body}capture list: 捕获列表,是一个lambda所在函数中定义的局部变量列表(通常为空)parameter list:参数列表return type:返回类型function body:函数体但是与普通函数不同,lambda必须使用尾置返回来指定返回类型我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体
123456this->setGeometry(800, 480);QPushButton *pushButton = new QPushButton("开关", this);pushButton -> setGeometry( ...
Qt控件③
QLabel控件
用来设计UI界面,给界面添加图片。右键项目名称来添加资源文件,选择Add New。
填上资源文件的名称(可随意写一个),默认添加项目路径下。后面的步骤默认即可,点击完成。
添加 qss 文件。 QSS 文件是使用 Qt 程序相关联的样式表文件。它由 GUI 元素的外观和感觉,包括布局,颜色,鼠标的行为,大小和字体。它的风格,一个可以合并到一个 UI(用户界面)。 与 HTML 的 CSS 类似, Qt 的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义,从而使应用程序的界面呈现不同的效果。
1234567891011121314151617181920212223#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QLabel>#include <QPushButton>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWi ...
Qt控件②
以下qt控件的学习记录是做毕设应该是需要用到的。
QPushButton控件
QPushButton是实现按钮点击的控件。在mainwindow.h文件中改写代码
1234567891011121314151617181920212223242526#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>/* 引入 QPushButton 类 */#include <QPushButton>class MainWindow : public QMainWindow{ Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow();private: /* 声明一个 QPushButton 对象 pushButton1 */ QPushButton *pushButton1; /* 声明一个 QPushButton 对象 pushButton2 */ QPushButton *pushButton2; privat ...
Qt控件①
字符串类操作字符串QString 提供了一个二元的“+”操作符用于组合两个字符串,并提供一个+=操作符将一个字符串追加到另一个字符串的结尾,另一种方法QString::append()函数具有同样功能。
123QString str1 = "welcome";str1 = str1 + "to you"; //str1 = "welcome to you";QString.append("!"); //str = "welcome to you !";
其他组合字符串作用函数:
insert()函数
原字符串特定位置插入另一个字符串
prepend()函数
原字符串的开头插入另一个字符串
replace()函数
用指定的字符串代替另一个字符串
arg()函数
重载数据类型
trimmed()函数
移除字符串两端的空白字符
simplified()函数
移除字符串两端的空白字符,使用单个空格字符”“代替字符串中出现的空白字符。
查询字符串数据
Q ...
开发板Qt环境搭建
搭建Qt环境防止因为运行qt程序导致网络中断,从而通过NFS挂载的根文件系统断联,串口中断没有反应,运行慢等情况,所以使用mfgtool进行固化系统到开发板上在进行,搭建qt。
烧录文件系统烧录文件系统之前有过,但是并不全面,这回进行整个系统的固化。
首先编译u-boot,编译方法跟以前一样。
1./mx6ull_alientek_emmc.sh
用到的文件是u-boot.imx。打开固化文件工具
进入文件夹中打开boot,将自己的uboot文件照着重命名后进行替换。
使用自构建的系统镜像和设备树文件进行重命名为以上的名字,来进行替换。
最后替换根文件系统,根文件系统不是替换文件,而是替换压缩包。
所以进行对根文件系统压缩。
首先我的压缩是在rootfs的外部使用的命令压缩,但是固化系统失败了。
1sudo tar -vcjf rootfs.tar.bz2
查询原因是应该变为内部打包。
12cd rootfstar -vcjf rootfs.tar.bz2 *
这个*是打包所有文件包括了隐藏文件所以可能是这个问题。解决可以固化系统了。
之后打开串口软件观察,从内部emmc ...
qt信号和槽
信号和槽信号和槽本质上是两个类在进行通信。信号或是传递值,或者是传递动作变化,槽函数响应信号或是接受值,或者根据动作变化来做出对应操作。信号本质信号是由于用户对窗口或者控件做了操作,导致窗口或者控件产生了某个特定事件,这时候对应的窗口类会发出某个信号,以此对用户的挑选做出反应。信号是qt对象中特殊的函数,本质上是一种函数指针,事件发生时调用,不是在信号所属的对象中直接执行。信号的呈现形式就是函数,也就是说某个事件产生了,qt框架会调用某个对应的信号函数,通知使用者。槽的本质槽的职责是对qt框架中产生的信号进行处理。槽是qt对象中普通成员函数,用于处理信号发生时的动作。一个槽可以连接一个或者多个信号,当信号触发时,与之连接的槽会被调用。
信号和槽机制优点
①类型安全:需要关联的信号和槽的签名必须是等同的。
②松散耦合:槽和信号不需要知道对方(信号不用知道是哪个槽接收的,槽不用知道哪些信号关联自己)
连接连接是信号和槽之间的桥梁,它将一个信号与一个槽相关联。当信号发生时,连接会调用与之关联的槽。连接的建立通常通过函数实现。
信号与槽关联是用 QObject::connect() 函数实现的 ...
c++浅学
浅学一下C++ ,为qt打基础写一个上位机软件来做毕设。
C++编译器C语言的编译器是gcc,但是C++的编译器是g++,可以通过命令行进行安装
1sudo apt-get install g++
###hello world
1234567#include <iostream>//iostream是输入和输出的库using namespace std;//使用空间名词stdint main(){ cout << "hello world!" << endl;//cout为 return 0;}
另外的写法
123456#include <iostream>int main(){ std::cout << "hello world!" << std::endl;//输出运算符<< return 0;}
1234567#include <iostream>int main(){ std::cout < ...