摘要 我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活.比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可不想把子窗口用代码一个个去析构.Qt 将这两者的优点完美的结合在了一起,创造出了特有的对象模型(Qt Object Model). 一,Qt的基本框架 在上一篇中,我们已经完成了Qt的安装和VS的环境配置.QT从入门到入土(一)--Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 -…
一.对象树的概念 Qt中使用对象树(object tree)来组织和管理所有的QObject类及其子类的对象.当创建一个QObject时,如果使用了其他的对象作为其父对象(parent),那么这个 QObject就会被添加到父对象的children()列表中,这样当父对象被销毁时,这个QObject也会被销毁.实践表明,这个机制非常适合于管理GUI对象.例如,一个 QShortcut(键盘快捷键)对象是相应窗口的一个子对象,所以当用户关闭了这个窗口 时,这个快捷键也可以被销毁. QWidget作…
摘要 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal).这种发出是没有目的的,类似广播.如果有对象对这个信号感兴趣, 它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函 数(称为槽(slot))绑定来处理这个信号.也就是说,当信号发出时,被连接 的槽函数会自动被回调.这就类似观察者模式:当发生了感兴趣的事件,某一个 操作就会被自动触发.(这里提一句,Qt 的…
引言 在前面对Qt多线程(QThread)做了详细的分析:QT从入门到入土(四)--多线程(QThread) - 唯有自己强大 - 博客园 (cnblogs.com) 但是最近在做项目时候,要将一个函数单独运行在另一个线程中,并且这个函数是私有函数,用到的数据也是私有数据,不能通过其他类访问,这样怎么办?如何在Qt中的当前类创建线程? 最简单的多线程QtConcurrent::run() 其函数原型如下: QFuture<T> QtConcurrent::run(Function functi…
引言 24岁的某天,承载着周围人的关心,一路南下.天晴心静,听着斑马,不免对未来有些彷徨.但是呢,人生总要走陌生的路,看陌生的风景,所幸可以听着不变的歌,关心自己的人就那么多.就像是对庸常生活的一次越狱,路才刚刚开始.... - 2021.7.12 Qt5.14.2安装教程 步入公司,因需要学习Qt,本文主要整理为Qt的学习记录,从入门到入土,纯干货,尽可能详细. 一,Qt简介 Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开库,主要用来开发图形用户界面(Graphic…
引言 新手上路可谓是困难重重,你永远不知道下一个困难会在什么时候出现,在完成了运动控制卡封装发布过程中可谓是举步维艰.因此记录一下qt5+vs2019的打包发布方法. 打包一般分为两步: 将编译后的exe可执行文件及其各种依赖dll.lib.图标.配置文件等先打包放到一个目录中 利用VS的插件Microsoft Visual Studio Installer Projects安装程序打包插件进行打包 一,将编译后的exe可执行文件及其各种依赖dll.lib.图标.配置文件等先打包放到一个目录中…
 引言 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt 提供了两种读写纯文本文件的基本方法: 用 QFile 类的 IODevice 读写功能直接进行读写 利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写. 一.文件读操作 (1)使用QFile类 Qt封装了QFile类,方便我们对文件进行操作,可以按照如下的步骤进行: 使用QFile加载文件对象 打开文件…
引言 前面几篇已经对C++的线程做了简单的总结,浅谈C++11中的多线程(三) - 唯有自己强大 - 博客园 (cnblogs.com).本篇着重于Qt多线程的总结与实现. 跟C++11中很像的是,Qt中使用QThread来管理线程,一个QThread对象管理一个线程,在使用上有很多跟C++11中相似的地方,但更多的是Qt中独有的内容.另外,QThread对象也有消息循环exec()函数,即每个线程都有一个消息循环,用来处理自己这个线程的事件. 一,知识回顾 首先先来回顾一下一些知识点: 1,为…
引言 TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯.控制器可以设置为服务器端或客户端. 关于TCP/IP协议可详看:TCP/IP协议详解 - 知乎 (zhihu.com) 总的来说,TCP/IP通讯有两个部分: 客户端和服务器 QTcpServer(监听套接字)和QTcpSocket(通讯套接字) 监听套接字,顾名思义,监听关于各种通讯的状态,一旦进行通讯,监听套…
作者:小豆君的干货铺链接:https://www.zhihu.com/question/27040542/answer/218384474来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在回答问题之前,你需要先知道Qt的精髓有哪些,而想要知道Qt的精髓,就应该先知道什么叫精髓. 首先,把精髓一词分开来看 精:字面意思是人的精血,我们从小就听到人有精.气.神,而且一级比一级高,而精则是气和神的基础,所以是组成物质的基本条件. 髓:字面意思就是骨髓,骨髓是人体核心的核…
接上一篇:RocketMQ入门到入土(一)新手也能看懂的原理和实战! 一.事务消息的由来 1.案例 引用官方的购物案例: 小明购买一个100元的东西,账户扣款100元的同时需要保证在下游的积分系统给小明这个账号增加100积分.账号系统和积分系统是两个独立是系统,一个要减少100元,一个要增加100积分.如下图: 2.问题 账号服务扣款成功了,通知积分系统也成功了,但是积分增加的时候失败了,数据不一致了. 账号服务扣款成功了,但是通知积分系统失败了,所以积分不会增加,数据不一致了. 3.方案 Ro…
无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two] extjs技术交流,欢迎加群(201926085) 不管是几级下拉列表的联动实现本质上都是根据某个下拉列表的变化,去动态加载其他下拉列表,如:省.市.地区. 当我们监听到省变化时,向service端发送省的编号,service端根据收到的"省"编号到数据库中查询该省所对应的市信息, 地区同理,抓住这一点,我们只需要监听 combobox 的 select 事件并在其中实现逻辑即可. 1.代码如下: 1 <!…
WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置binding对象的方法名得知: public static BindingExpressionBase SetBinding( DependencyObject target, DependencyProperty dp, BindingB…
SQLite入门与分析(二)---设计与概念(续)   写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim Gray(曾任职微软)就是因为在事务处理方面的成就而获得这一殊荣,正是因为他,才使得OLTP系统在随后直到今天大行其道.关于事务处理技术,涉及到很多,随便就能写一本书.在这里我只讨论SQLite事务实现的一些原理,SQLite的事务实现与大型通用的DBMS相比,其实现比较简单.这些内容可能比较偏于理论…
Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Django自带的模板来学习(显示一个通讯簿). 在views.py中添加函数addressbook from django.shortcuts import render_to_response ..... address=[ {'name':'zhou','address':'上海'}, {'name'…
这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(一) GitHub 代码同步更新:https://github.com/nanchen2251/RxJava2Examples 为了满足大家的饥渴难耐,GitHub将同步更新代码,主要包含基本的代码封装,RxJava 2.x所有操作符应用场景介绍和实际应用场景,后期除了RxJava可能还会增添其他东西,总之,GitHub上的Demo专为大家倾心打造.传送门:https://github.…
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量并没有什么区别. 函数是一等公民,这是函数式编程的基础,然而 Python 中基本上不会使用 lambda 表达式,因为在 lambda 表达式的中仅能使用单纯的表达式,不能赋值,不能使用 while.try 等语句,因此 lambda 表达式要么难以阅读,要么根本无法写出.这极大的限制了 lamb…
本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Range 单元格 Cell 这里我只讲后面3个,不讲工作薄.原因有2点: 第零章里面讲过,工作薄其实就是一个Excel文件.我不建议直接操作Excel文件.因为文件属性被更改的机率高.比如修改了文件名,或者文件被移动到其它地方去了,这样的话,写死的VBA代码就不管用了.这是主要原因 学完本章,或者后面…
原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo是这样的: 有许多书的集合,书 类中有图片.标题.作者和ID,把它成现在GridView 控件上,每次点击GridView 的时候动态显示书本信息 github 代码 效果图: 原理图: 1. Template 为GridView 创建一个Template,决定每个独立的图书对象如何呈现在屏幕上 <…
目录 一.回顾 二.框架说明 1.ICallDPIChanged 2.IDPIHelper 3.悬浮窗体管理器 三.方案分析 1.窗口大小 2.字体大小 3.间距 4.图标 四.相关文章 原文链接:Qt之高DPI显示器(二) - 自适配解决方案分析 最近一直在处理高DPI问题,也花费了不少功夫,前前后后使用了多种解决方案,各种方案也都有利弊,笔者最终采用了自适配方案,虽然复杂一些,但是结果可控.这里把处理的过程记录下来,留给有同样需求的同学 一.回顾 上一篇文章Qt之高DPI显示器(一) - 解…
WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建 四月 4, 2019 作者:李超,音视频技术专家.本文首发于 RTC 开发者社区,欢迎在社区留言与作者交流. https://webrtc.org.cn/webrtc-tutorial-2-signaling-stun-turn/ 本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了如何构建信令服务器.但构建的信令服务器是如何工作的?那些消息需要信…
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常用的基本变量Integer,String,Decimal,Double,Long,Boolean,ID. 集合常用的对象:List<T>,Set<T>,Map<T>. 时间日期常用对象:…
在上一篇博客:DQN(Deep Q-learning)入门教程(一)之强化学习介绍中有三个很重要的函数: 策略:\(\pi(a|s) = P(A_t=a | S_t=s)\) 状态价值函数:\(v_\pi(s)=\mathbb{E}\left[R_{t+1}+\gamma \left(S_{t+1}\right) | S_{t}=s\right]\) 动作价值函数:\(q_{\pi}(s,a) = \mathbb{E}_{\pi}(R_{t+1} + \gamma q_{\pi}(S_{t+1}…
PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计界面组件与QWidget类相关的组件属性弄清楚了,写了个大章节,准备参与CSDN的推荐使用,加章节名不太好,因此在此使用章节序号独开一节引用具体博文.具体博文地址: PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解 博客地址:htt…
本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习研究精心整理而成,禁止转载. 内容提纲 引言 概述 QWidget属性列表 Qt Designer组件属性归类 组件大小及位置控制的属性 界面响应事件控制属性 信息管理属性 外观控制属性 后记 一.引言 在Qt Designer中,提供了八大类可视化组件(也称为组件或控件,下同),分别为布局组件(L…
Qt 的入门我觉得可以直接从窗口开始,而不是什么"Hello World!".因为Qt 是一个基于图形界面的编程软件,图形界面编程是其核心所在.很久以前,那时候还是Shell编程,操作的只是文本,现在可以操作图形界面,那么第一个"Hello"图形界面就是能够显示窗口并通过按钮将其关闭. 1 创建项目:New Project 2 选择模板:应用程序>>Qt Widgets Application>>选择 3 项目位置:设置项目名称>>…
QT快速入门 本文档将介绍QT工程的创建.UI界面布局,并以计数器为例了解QT中多线程的用法,最终完成一个基础的QT项目. 1 创建QT工程文件 在安装好QT之后,能够在其安装组件中找到Qt Creator,点击 设置项目名称及路径等,设置支持32位与64位,其他都直接下一步: 创建完成,项目中包含以下几个文件: QT项目文件QTTEST.pro,主窗口头文件mainwindow.h,主窗口程序mainwindow.cpp,主函数main.cpp以及窗口UI文件mainwindow.ui. 我们…
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改DataGrid 的选择模式. SelectionUnit的选择模式. 成员名称   说明 Cell 选择单元格.单击单元格选中单元格. 单击任何行或列标题不执行. FullRow 选择全行. 单击单元格或行标题可以选择整行. CellOrRowHeader 可选择单元格,也可以通过点击行首选择全行…
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值等信息 通过ServiceContract.OperationContract.DataContract.DataMember等属性参数,将服务.操作.数据结构定义清楚. 在这里我们还清晰看到,WCF服务传输数据类型不只是通用数据类型,而且还可以传输自定…
iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI开发我们需要手动管理内存,所以我们要把ARC关掉(Xcode关掉ARC的步骤): (1)打开Xcode选中当前工程: (2)选中Build Settings: (3)在输入框内输入count: (4)选择Objective-C Automatic Reference Counting  将其设置为 …