QT基础练习-程序员宅基地

技术标签: qt  

槽函数

 connect(ui>logoBt,SIGNAL(clicked()),this,SLOT(logoBt_clicked_slots()));
 ​
 connect(A,SIGNAL(B),C,SLOT(D));
 ​
 当对象A发出B信号时候,就会触发对象C的槽函数D

qt基础

做一个简单的qt界面

如何创建一个QT工程?

步骤一:

步骤二:

不要有中文路径

步骤三:

工程文件分析:

点击forms,然后双击ui文件,就可以进入ui编辑器。

ui编辑器面板介绍:

做一个简单的QQ登录界面

我们用到组件

放图片,放文本,放gif图的组件就是qlabel。

放账号和密码的对话框我们用的组件是qlinedit。

按钮我们使用的组件是qpushbutton

怎么关联信号和槽

自动关联:在ui界面里,右键点击对应的控件->转到槽

第一个部分: 自动关联会给我们的工程添加以下内容:

槽函数只能声明到private slots或者public slots 下面。(QT特有)

第二个部分:

手动关联:使用connect这个函数。

 connect(ui>logoBt,SIGNAL(clicked()),this,SLOT(logoBt_clicked_slots()));
 ​
 connect(A,SIGNAL(B),C,SLOT(D));
 ​
 当对象A发出B信号时候,就会触发对象C的槽函数D

写一个界面

图标下载网址: iconfont-阿里巴巴矢量图标库

1、添加图片:

  • 右键项目名->添加新文件->Qt->Qt Resource File

  • Resourrces文件夹下右键.qrc文件->Open with>资源编辑器-添加前缀(一般默认根文件)->Crtl+S 保存文件->添加文件 注意:记得保存!!!

2、引用图片

  • 右击想要的控件->改变样式表->添加资源->border-image。可以添加多张照片。

添加新的界面:

  1. 右键项目名-》添加新文件-》Qt-》Qt 设计师类界面-》设置类名

  2. 26、28行,创建类的对象。问题:在这个类下随意创建一个对象就是我们在编辑的ui界面吗???

效果图:

qt 的三驾马车

1.qt 下的串口编程

2.qt 下的网络编程

3.qt 下操作 GPIO

想要在开发板上运行:

交叉编译Qt源码->生成Qt库->移植到开发板上

左下角这一块最好先栅格布局,然后和右边水平布局

实现串口功能

1.编辑工程文件(后缀为 .pro 的文件) 在 QT += core gui 后添加 serialport。

2.自动获取串口 使用 QSerialPortInfo:::availablePorts()获取当前串口, 该函数返回容器类Qlist<QSerialPortInfo>, 用 Qt 定义的关键字 foreach 遍历容器 Qlist 里的串口信息, 并将串口信息放到 QStringList 的类对象 serialNamePort,显示到 ui 的串口组件。

打开串口功能和属性设置 步骤一: 实例化串口类 QSerialPort 对象 serialPort, 对串口的操作就是对 serialPort 对象的操作

问题:.h文件18行,.cpp文件13行。为什么这么写2次。

注意:修改.exe文件图标使,不能偷懒直接把图片的后缀改成.ico文件,会报错

网络编程

客户端用到QTcpSocket。服务端用到QTcpServer 和 QTcpSocket。

在.h文件中:

 QTcpServer * tcpServer;
 QTcpSocket * tcpSocket;  

创建指针形式,是为了申请栈空间、因为new出来的是指针类型(弹幕)

在cpp文件中:

 tcpServer = new QTcpServer(this);
 tcpSocket = new QTcpSocket(this);

其中this可忽略。

注意:接收窗口和接收框先垂直布局,比较好看。发送窗口同理。

问题:

 void Widget::on_sendPb_clicked()
 {
     tcpsocket->write(ui->sendEdit->text().toLocal8Bit().data());//和串口实验类似,转换成char*类型?
 }

实现效果:

注意:

  • 服务器和客户端的端口要一致

  • ipconfig显示多个ip地址时,有默认网关的那个是本机ip。

UDP通信

 udpSocket = new QUdpSocket(this);//this表示父对象被删除时,子对象也被删除。


 QByteArray array;
 //hasPendingDatagrams()返回 true 时表示至少有一个数据报在等待被读取。即没读取完时返回true
 while(udpSocket->hasPendingDatagrams()){
 //获取数据
 array.resize(udpSocket->pendingDatagramSize());//将数组大小调整为跟udp剩下的一样。
 udpSocket->readDatagram(array.data(),array.size());
 buf = array.data();
 ui->recvEdit->appendPlainText(buf);
 }  

时钟

 connect(&timer,SIGNAL(timeout()),this,SLOT(timeOut_Slot()));  //传个地址过去,用的内存还是刚刚定义的内存,这样可以节省空间

除显示时钟和timeout_slot()触发函数中使用time,其他地方都用定时器timer。

//每隔50ms触发一次定时器,使time时钟每次增加50ms
 ​
 void Widget::timeout_slot()
 {
     time = time.addMSecs(50);
 ​
     ui->showTime->setText(time.toString("hh:mm:ss.zzz"));
 }
 ​
 void Widget::on_openPb_clicked()
 {
     timer.start(50);//每50ms触发一次信号
 }
 ​

系统移植-构建根文件系统

因为用ULL开发板演示,所以要打包成.tar.bz2形式。

 tar -cjf rootfs.tar.bz2 bin dev etc lib linuxrc mnt proc sbin sys tmp usr var

交叉编译QT源码

交叉编译:在Ubuntu编译好,送给另外一个平台使用。要想在开发板上使用,要先交叉编译QT源码,生成QT库,再移植到开发板上使用。(以上步骤在Ubuntu中完成)

用file命令查看

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/andrew681/article/details/137836053

智能推荐

el-button 显示与禁用_el-button禁用-程序员宅基地

文章浏览阅读8.4k次。el-button 的显示与隐藏iconfont 的引用_el-button禁用

STL-map按value排序_std::map 按value排序-程序员宅基地

文章浏览阅读953次。方法1 将pair存入vector排序在map中存储 <key, value> 键值对的数据结构是pair,简单直接的想法是将map中的pair复制一份存储到vector中,并重写compare函数根据second元素排序,就可以使用sort对该vector进行排序。代码实现#include <iostream>#include <algorithm>#include <string>#include <map>#include &l_std::map 按value排序

python列表中两个元素,多个元素进行位置互换,列表排序_change_list()-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏18次。两个元素位置互换change_list = [6, 8]print(change_list)# 交换列表,以下两个均可# change_list[0], change_list[1] = change_list[1], change_list[0]change_list[1], change_list[0] = change_list[0], change_list[1] pri..._change_list()

SpringSecurity_基于角色权限进行访问控制-程序员宅基地

文章浏览阅读446次。1. hasAuthority方法(只针对某一个权限)如果当前的主题具有指定的权限,则返回true,否则返回false在配置类设置当前访问地址有哪些权限@Override protected void configure(HttpSecurity http) throws Exception { //自定义自己编写的登录页面 http.formLogin() .loginPage("/login.html")//登录页面设置

基于python的数字图像处理--学习笔记(一)_数字图像处理代码整理python-程序员宅基地

文章浏览阅读1.6k次,点赞4次,收藏14次。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用。并使用numpy库对图片的矩阵数据进行变换处理,实现平移旋转等操作。dstCn:用于指定目标图像的通道数,如果指定的值是默认值0,那么通道数将由输入图像和颜色转换码决定。可以实现RGB颜色向HSV,HSI等颜色空间转换,也可以转换为灰度图。输入原始图像,输出新图像,图像的大小。dst:表示目的地的矩阵。_数字图像处理代码整理python

mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’_can't connect to local mysql server through socket-程序员宅基地

文章浏览阅读1.6w次,点赞11次,收藏14次。mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock_can't connect to local mysql server through socket '/var/lib/mysql/mysql.soc

随便推点

Android Studio 引入aar文件_androidstudio引入aar包-程序员宅基地

文章浏览阅读2.5w次,点赞8次,收藏24次。方法一:在app目录下导入aar在app-libs目录下导入aar在app-build.gradle中配置repositories { flatDir { dir 'libs' } }implementation(name:'Test_debug', ext:'aar')构建项目,在External Libraries目录下会生成该依赖方法二、在项目根目录下导入aar(该方法更加实用,如果某一个library想依赖_androidstudio引入aar包

将SolidWorks模型文件导入Gazebo_solidworks模型导入ros-程序员宅基地

文章浏览阅读4.8k次,点赞7次,收藏87次。安装环境SolidWorks2016Gazebo7下载URDF插件下载链接:http://wiki.ros.org/sw_urdf_exporter默认路径安装到C盘,请根据自己的SolidWorks安装位置选择。_solidworks模型导入ros

AttributeError: module 'struct' has no attribute 'unpack'_line 104, in send_struct vs_h1 = struct.decode(res-程序员宅基地

文章浏览阅读980次。记一次Python代码出错在使用python struct模块读取二进制文件进行解析的时候,出现了这个报错,检查以后发现,我将py文件命名为struct.py在实际使用中要避免使用已经分配的标识符进行代码文件命名。其他的模块也会出现此错误。..._line 104, in send_struct vs_h1 = struct.decode(response) attributeerror: mod

(练习)vue2 + datav 数据大屏 手把手教你 datav (4)_看板大屏 datav 软件安装-程序员宅基地

文章浏览阅读1.2k次。一,先安装 datav 可以参考介绍 | DataV (jiaminghi.com) 使用 #按需引入 先效果展示二, 分解教学  main.js 根据自己需求引入打开页面定位每个地方的位置然后开始引入代码_看板大屏 datav 软件安装

pycharm输出中文乱码解决方案_pycharm打印中文乱码-程序员宅基地

文章浏览阅读3.4k次,点赞7次,收藏6次。pycharm输出中文乱码解决方案_pycharm打印中文乱码

ARM 体系结构、处理器内核、内存及 IO-程序员宅基地

文章浏览阅读1.8k次。教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社体系结构ARM 是典型的 RISC 体系,许多指令能够在单周期内执行高速缓存内核MPU – 内存保护单元控制内存访问权限控制内存区域的属性(cacheable, bufferable)MMU – 内存管理单元具有MPU的所有特性;提供虚拟地址到物理地址的转换Cache(高速缓存)快速的本地内存;存放最近被访问过的内存的副本TCM

推荐文章

热门文章

相关标签