第九天:QT入门保姆教程(常用的控件,信号与槽,定时器 QTimer,样式表 Qt Style Sheets,sqlite3数据库,开发板串口)

QT的简介

我另外分享了一个qt案例源码包,里面包括文章中的任务源码和一系列常用案例需要的点击此处下载

官网 www.qt.io QT 是一个基于C++的 跨平台的 应用程序开发框架 跨平台:一次编写,到处编译 主流的平台都支持,如:Windows,Linux,Android,MacOS ... 应用程序:主要用于GUI程序开发,也可以用于后台或者底层程序开发 开发框架:有现成的库可供使用,提高开发效率 

1.第一个QT程序

1)用 QtCreator 创建一个工程 欢迎  -->  New Project  --> 其他项目 --> empty qmake project 2)在空的pro项目中 添加文件:  右键点击项目 --》 添加新文件 --》C++  --》 C++ source file --》命名添加模块: QT += widgets3)第一个应用程序 
   #include <QApplication>     //所有的QT程序都必须加载此头文件,用于管理这个应用程序#include <QWidget>         //空白的界面int main(int argc, char* argv[]){//实例化一个QApplication类型的对象,用于管理整个应用程序,如接收命令行参数QApplication a( argc, argv );//实例化一个QWidget空白界面对象w,默认隐藏QWidget w;//显示界面w.show();//让应用程序进入事件循环,让界面不退出,并能够接收用户的事件,如:鼠标点击、键盘输入等... a.exec();return 0;}
点击“运行”  Ctrl + r 

2.QT程序的补充

QT中所有的头文件都是以大写字母Q开头,Q后面的单词首字母也是大写 头文件没有后缀名,头文件的名称也是类名称 所有的QT界面应用程序 都必须包含 QApplication类,用这个类来实例化一个对象,用于管理整个QT项目QT中的类型 是按功能 划分 模块模块很多,但是和界面相关的模块主要用到如下模块:core    核心模块,其他的所有模块都依赖于此模块,默认加载 gui     界面相关的功能模块,如字体、颜色、风格等,默认加载widgets  界面元素(所有能够在界面上看到的控件)都放在此模块中,需要用户自己添加到pro文件中 添加方式:QT += widgetsQT += core QT += gui每个模块中都包含很多类,widgets模块中最核心的类型就是 QWidget QWidget类 有两个基类 和 许多派生类 两个基类: QObject  这个是QT层次中 最顶层的基类,它提供了QT最核心的功能:信号与槽 QPaintDervice 这也是一个顶层基类,该类以及它的派生类 能够作为绘制设备使用它的派生类可以分为两类:界面类 QMainWindow 就是包含菜单、工具栏、状态栏的界面 QDialog     对话框 控件类菜单、工具栏、状态栏、按钮、文本框、标签、组合框架 ...所有的控件都应该出现在某个界面上

3.pro文件

    所有的QT项目中 都必须包含一个pro文件(工程管理文件)描述了这个项目中所有的东西(头文件/源文件/界面文件/模块/第三方库/...)

4.影子构建(如果出现在设计里面改ui但是运行不生效的情况,点击 项目-构建 取消影子构建即:shadowbuild)

    QtCreator在默认情况下 把项目的源码(.h/.cpp/.ui/...) 与 中间以及结果(.o/Makefile/xxx ...)文件 分开存放,源码在项目的文件夹下,而中间以及结果文件 跟随项目的文件夹, 与项目文件夹在同一个目录中 存放中间以及结果文件的文件夹 称为构建目录 ,名称: build-项目名称-编译套件名-模式例如: build-test2-Arm_Qt_5_9_1-Releasebuild-test2-Desktop_Qt_5_9_1_GCC_64bit-Debugbuild构建目录 可以删除,只需要重新构建即可 都会自动生成如果是从其他地方拷贝过来的项目,建议删除build构建目录,再重新编译

QT常用操作教程

1、常用的控件

label  标签
lineEdit 文本框(单行)
pushButton  按钮 
... 修改控件的属性:font 字体 alignment  对齐geometry    宽高固定界面的尺寸 把 minimumsize 和 maximumsize 两个值设置成一样 echomode  显示模式(如:设置密码不可见)....练习:设计一个简易的登陆界面 预览 快捷键: Alt Shift r 选中控件,右键 --》 转到槽 

2、信号与槽

信号和槽 是一种通信机制,用于Qt对象之间的通信  Qt对象:QObject类以及其派生类的对象 称为Qt对象 信号和槽的本质 就是函数 当一个Qt对象的内部状态发生了改变,就可以发送一个信号 当一个Qt对象收到这个信号之后,就可以执行指定的功能 信号与槽的连接QObject类提供了一个函数 connect() ,用于连接两个Qt对象的信号和槽 对于Qt对象的通信,Qt系统 需要了解如下的信息:哪个对象发出了信号 发出了什么信号 哪个对象接收信号收到信号后做什么所以 connect() 函数的常规的参数如下: connect( sender, SIGNAL( 信号函数名(参数类型) ), receiver, SLOT(槽函数(参数类型)) );sender, receiver 都是Qt对象的地址connect()函数需要执行一次,且只需要执行一次,一般情况下,把connect()函数 通常出现在 构造函数中 所有的界面元素对象,都可以进行通信,而且还预定义了一些信号和槽,可以直接使用的 
如果预定义的信号和槽不能满足项目需求,还可以 自定义信号与槽  (1)自定义信号:(a)在头文件中声明信号 signals: 返回值类型 信号函数名(参数列表);(b)使用信号 发送信号:  emit 信号函数名(参数列表); (2)自定义槽(a)在头文件中声明槽函数 public/private/protected slots: 返回值类型 槽函数名(参数列表);(b)在源文件中添加定义返回值类型 槽函数名(参数列表){//槽函数体 }(c)使用 可以使用普通函数一样的调用方法 直接 调用槽函数 可以用connect与某个信号相关联,当连接的信号发出时,立即自动调用该槽函数 信号与槽的连接 可以有两种形式: 手动连接:自己调用connect函数,连接两个对象的信号与槽自动连接:从界面设计器中 右键选中控件--》转到槽,自动生成槽函数,根据对象名和信号函数名,自动连接 例子: 按钮 最常用的信号 叫 clicked() ..按钮 也有自带的槽函数, 如: show() / hide() / setText() ... 界面 常用的槽函数 有 show() / close() / hide() ... 

3、定时器 QTimer

用于重复(循环)的执行某个动作,设置一个时间间隔,时间到就会超时 发出信号timeout(),
一直重复此过程,直到定时器停止加载头文件 #include <QTimer>实例化定时器对象 QTimer *timer = new QTimer(this);设置间隔时间 timer->setInterval( int msecs );    //单位:ms 连接信号与槽 当定时器超时,发出信号timeout() connect( timer, SIGNAL(timeout()), this, SLOT(槽函数) );启动定时器 timer->start() 停止定时器 timer->stop() 典型的应用的应用:获取并显示当前的系统时间

4、样式表 Qt Style Sheets

样式表 借鉴了HTML中的CSS(层叠样式表), 应用到QT的控件中 用于自定义 界面外观,如界面背景颜色、背景图片、字体、颜色、形状、 ... 样式表有自己专门的语法规则:我们把设置界面外观的样式表代码,称为样式规则 一条样式规则,由两部分组成:(1)样式选择器 :指定 受样式规则 影响的控件 样式选择器有7中,其中最常用的是以下2种:类型选择器:所有属于该类型的控件 都会受到样式规则的影响 ID选择器:ID指的是 对象名,也就是说 特定对象名的控件 才会受到样式规则的影响例子: 选择器设置为 QPushButton,那么所有的QPushButton类型的对象都会受影响 选择器设置为 QPushButton#btn_login,那么只有 控件名为btn_login的按钮 才会受到样式规则的影响 (2)样式声明 :控件的具体的外观设置,如颜色、大小、字体等 由两部分组成:属性 : 指定要设置的具体的属性名 值 :   指定要设置的具体的属性的值属性与值 用冒号隔开例子: 需要设置某个控件的字体颜色为红色 {color: #FF0000}因此 一条完整的样式规则如下:选择器1, ...{属性1:值1; ... }例子: 要设置所有的按钮的字体颜色都为红色,样式规则 如下:QPushButton{//color: #FF0000color: rgb(255,0,0)}样式规则有两种设置方式 UI设计器双击xxx.ui文件,进入UI设计器,右键选择要设置的控件,在弹出的菜单栏中,选择“改变样式表” 代码 (最终运行会以代码的样式设计为主,会覆盖UI的设计)setStyleSheet("样式规则")常用的样式规则的示例:
       QPushButton             /*所有的按钮的正常属性的设置*/{color:#FFFF00;                          //字体的颜色background-color: rgb(114, 159, 207);   //背景颜色font: 57 italic 11pt "Ubuntu";          //字体:权重、斜体、点大小(粗细)、字体名称}QPushButton#btn_circle             /*对象名为btn_circle的按钮的正常属性的设置*/{color: #FF000;              //字体颜色 border-radius: 50px;        //边框半径:如果按钮的宽和高相同,边框的半径为宽高的一般,则为圆形按钮border-width: 2px;           //边框大小(粗细)border-style: solid;        //边框的风格: solid表示实线,更多的风格 参考帮助文档border-color: green;        //边框颜色 }QPushButton#btn_circle:pressed       /*对象名为btn_circle的按钮的伪状态的设置:pressed按下状态 */{background-color: #FFFF00 ;     //背景颜色,鼠标左键点击,改变背景颜色 // background-color: transparent;       //透明}

5、样式表中添加资源文件

1)准备资源 把各种资料(图片、图标等), 放入源码目录 建议创建一个图片文件夹,专门用来存放各种图片2)添加资源 右键工程名--》添加新文件--》QT--》QT Resource File --》起名(如Res)--》下一步 到 完成 在新出现的界面中,点击添加 添加前缀(路径),一般设置为 / 就可以了 添加文件 默认打开的就是源码目录,选择要添加的各种资源即可 最后 保存 Ctrl s 3)使用资源 右键ui界面 --》 改变样式表 --》 添加资源 ,有三种效果 background-image        平铺 border-image            拉伸 image                   居中根据需要 选择其中之一 即可 

6、数据库

帮助文档 SQL Programming 大多数关系型数的操作步骤:1)连接数据库 多数关系型数据库都是C/S模型 (Client/Server)sqlite3是一个本地的单文件关系型数据库,同样也有“连接”的过程 2)操作数据库 作为程序员,对数据库最常见的操作 就是 增删改查3)关闭数据库 连接也是一种资源,用完记得释放 Qt中 的数据库功能是放在一个单独的模块中,模块名为 sql  所以 如果需要使用Qt的数据库功能,需要在pro文件中 添加如下的指令: QT  +=  sql  Qt的sql模块中包含了大约10几个类型,常用的以下的三个:(1) QSqlDatabase 用于处理数据库的连接,包括 创建连接对象、设置连接属性、关闭连接(2) QSqlQuery用于执行SQL语句(3) QSqlError用于处理数据库错误,提供可读的错误信息 连接数据库的典型代码:
       //初始化连接对象,使用静态函数addDatabase,参数是数据库类型 QSQLITE -- sqlite3db = QSqlDatabase::addDatabase("QSQLITE");//设置数据库名,建议带路径,如果存在,直接打开,如果不存在,则自带创建db.setDatabaseName("../test.db");//打开连接, 成功或者失败,给出相应的提示对话框bool ok = db.open();if( !ok ){QMessageBox::information( this, "tip", db.lastError().text() );return ;}QMessageBox::information(this, "tip", "connect db success! ");执行SQL语句的典型代码://创建用来执行SQL语句的对象QSqlQuery query( db );//准备SQL语句QString createsql = QString( "select username, passwd from t_user where username='%1';").arg(ui->lineEdit->text());qDebug() << createsql;//执行SQL语句if( !query.exec( createsql ) ){qDebug() << "select error : " << query.lastError().text();return ;}//QMessageBox::information( this, "提示", "select success! ");//遍历结果集while( query.next() ){//value用来获取一条记录(行)的列的值,可以使用索引(下标),也可以使用列名//value返回的是一个共用体,必须转换成该列的值真正的类型才来使用QString username = query.value(0).toString();QString passwd = query.value("passwd").toString();qDebug() << username << " -- " << passwd;}
任务: 实现用户的登录注册功能 登录功能:获取用户输入的信息 查询数据库(获取用户名和密码)进行验证,并提示相应信息注册功能:获取用户输入的信息 往数据库插入数据  stackedWidget 控件用于实现多页面的切换 //确保一开始显示的是登陆界面ui->stackedWidget->setCurrentWidget(ui->page_login);

7、串口

帮助文档 Qt Serial Port 需要使用串口模块,在pro文件中添加模块:QT  += serialport 该模块中包含两个类,一般只需要用其中一个 QSerialPort 使用步骤: 1)加载头文件 #include <QSerialPort>2)实例化对象 QSerialPort *serial = new QSerialPort(this); 3)连接信号与槽 connect( serial, &QSerialPort::readyRead, this, 自定义的槽函数 );4)设置属性 一般需要设置串口的名称,波特率,数据位,奇偶校验、停止位、流控 serial->setPortName("/dev/ttySAC1");            //串口的名称serial->setBaudRate( QSerialPort::Baud9600 );   //波特率serial->setDataBits( QSerialPort::Data8 );      //数据位serial->setParity( QSerialPort::NoParity );     //奇偶校验serial->setStopBits( QSerialPort::OneStop );    //停止位serial->setFlowControl( QSerialPort::NoFlowControl );   //流控5)打开串口 serial->open( QIODevice::ReadWrite );   //以读写的方式 打开串口打开成功后,如果串口外接的设备有数据可读,那么serial对象自动发送一个信号readyRead,我们只需要在相应的槽函数中 读取数据即可 =====================================GEC6818开发板的串口设备文件路径名:CON2  "/dev/ttySAC1"CON3  "/dev/ttySAC2"CON4  "/dev/ttySAC3"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144641.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

科技云报道:大模型的阴面:无法忽视的安全隐忧

科技云报道原创。 在AI大模型的身上&#xff0c;竟也出现了“to be or not to be”问题。 争议是伴随着大模型的能力惊艳四座而来的&#xff0c;争议的核心问题在于安全。安全有两个方面&#xff0c;一个是大模型带来的对人类伦理的思考&#xff0c;一个是大模型本身带来的隐…

Python 小爬虫入门 -- 爬取专栏文章标题保存到 CSV 文件中

爬取专栏文章标题保存到 CSV 文件中目标分析网页代码及理解代码段一代码段二成果展示爬取专栏文章标题保存到 CSV 文件中 目标 从一个网页上抓取数据,并保存到一个 CSV 文件中。 具体是爬取 微机系统与接口上机实验_TD PITE型 专栏里的所有 文章标题 并 保存到 csv 文件 中…

libopenssl 实现私钥加密公钥解密

在需要验证可信来源时&#xff0c;需要用到签名验签。因此&#xff0c;需要使用私钥加密&#xff0c;公钥解密&#xff0c;取得被加密的信息。这就会使用到私钥加密&#xff0c;公钥解密的场景了。 参考&#xff1a; https://github.com/openssl/openssl/issues/20493 https:/…

FastAPI Python照片打马赛克API

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、FastAPI是什么&#xff1f;二、使用步骤1.安装FastAPI及Uvicorn2.编写马赛克核心代码3.编写照片上传接口4.编写马赛克处理接口 三、测试总结 前言 现代社会…

【数据结构初阶】六、线性表中的队列(链式结构实现队列)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】五、线性表中的栈&#xff08;顺序表实现栈&#xff09;_高高的胖子的博客-CSDN博客 1 . 队列&#xff08;Queue&#xff09; 队列的概念和结构&#xff1a; 队列…

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用

小T导读&#xff1a;为满足地震预警数据存储、检索和处理的建设与集成需求&#xff0c;以及响应国家国产软件自主可控的号召&#xff0c;中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…

C#求100-999之间的水仙花数,你知道多少个?让我们一起来探索!

目录 背景: 扩展: 水仙花数例子: 效果展示:​ 总结: 背景: 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数&#xff08;Armstrong…

基于微信小程序的新闻发布平台小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

MySQL MMM高可用架构

MySQL MMM高可用架构一、MMM概述1、MMM简介2、MMM高可用架构3、MMM故障切换流程 二、MMM高可用双主双从架构部署1、配置主主复制&#xff08;master&#xff09;&#xff0c;主从复制&#xff08;slave&#xff09;1&#xff09;修改 Master1的MySQL配置文件2&#xff09;把配置…

软件设计师笔记系列(四)

&#x1f600;前言 随着技术的快速发展&#xff0c;软件已经成为我们日常生活中不可或缺的一部分。从智能手机应用到大型企业系统&#xff0c;软件都在为我们提供便利、增强效率和创造价值。然而&#xff0c;随之而来的是对软件质量的日益增长的关注。软件的质量不仅关乎其功能…

基于微信小程序的高校宿舍管理系统设计与实现(亮点:选择宿舍、宿舍评分、宿舍报修)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 文章目录 系列文章目录[TOC](文章目录) 前言1、Eureka 两大组件2、Eureka 服务注册与发现3、案例3.1、创建主工程3.1.1、主…

【Java 进阶篇】深入理解 SQL 聚合函数

在 SQL 数据库中&#xff0c;聚合函数是一组强大的工具&#xff0c;用于处理和分析数据。它们可以帮助您对数据进行统计、计算总和、平均值、最大值、最小值等操作。无论您是数据库开发者、数据分析师还是希望更好地了解 SQL 数据库的用户&#xff0c;了解聚合函数都是非常重要…

Android12之Codec2.0配置编解码器为H264实现(四十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Qt使用I.MX6U开发板上的按键(原理:将电脑键盘方向键↓在Qt中的枚举值与开发板中按键定义的枚举值一致,这样电脑端测试效果就与开发板的一致)

在上篇介绍了Qt点亮I.MX6U开发板的一个LED&#xff0c;对于Qt控制I.MX6U开发板的一个蜂鸣器原理也是一样的&#xff0c;就不做详细介绍&#xff0c;具体可参考Qt控制I.MX6U开发板的一个蜂鸣器&#xff0c;本篇介绍Qt使用I.MX6U开发板上的按键的相关内容。 文章目录 1. 开发板硬…

李宏毅机器学习第一课(结尾附作业模型详细分析)

机器学习就是让机器找一个函数f&#xff0c;这个函数f是通过计算机找出来的 如果参数少的话&#xff0c;我们可以使用暴搜&#xff0c;但是如果参数特别多的话&#xff0c;我们就要使用Gradient Descent Regression (输出的是一个scalar数值) Classification &#xff08;在…

QT配置MySQL数据库 ninja: build stopped: subcommand failed

QT配置MySQL数据库 我当前的软件版本&#xff1a;QT Creator 10.0.2 (community)&#xff0c;MingW 6.4.3 (QT6)&#xff0c;MySQL 8.0。 MySQL不配置支持的数据库有QList("QSQLITE", "QODBC", "QPSQL")&#xff0c;这个时候是不支持MYSQL数据…

数据集笔记:2015上海地铁一卡通数据

数据地址&#xff1a;上海地铁数据_免费高速下载|百度网盘-分享无限制 (baidu.com) 数据介绍 上海2015年几天的地铁一卡通出入站信息 卡号、交易日期、交易时间、公交线路/地铁站点中文名称、行业名称(公交、地铁、出租、轮渡、PR停车场)、交易金额、交易性质(非优惠、优惠、…

PHP生成二维码带图标代码实例

PHP生成二维码带图标代码实例&#xff08;PHP QR Code二维码生成类库&#xff09; public static function png($text, $outfilefalse, $levelQR_ECLEVEL_L, $size3, $margin4, $saveandprintfalse) { $enc QRencode::factory($level, $size, $margin); return $enc->…

token登录的实现

token登录的实现 我这种token只是简单的实现token&#xff0c;就是后端利用UUID 生成简单随机码&#xff0c;利用随机码作为在Redis中的键&#xff0c;然后存储的用户信息作为值&#xff0c;在每次合理请求的时候对token的有效时间进行刷新&#xff08;利用拦截器&#xff09;&…