自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

echo_bright_的博客

计算机网络基础/ Linux网络编程

  • 博客(22)
  • 资源 (2)
  • 收藏
  • 关注

原创 Qt多线程中的信号与槽

1. Qt对象的依附性和事务循环  QThread继承自QObject,自然拥有发射信号/定义槽函数的能力。QThread默认声明了以下几个关键信号(信号只能声明不能定义):   (1) 线程开始运行时发射的信号void started()  (2) 线程完成运行时发射的信号void finished()  (3) 线程被异常终止时发射的信号void terminated()  多线程中的信号与槽

2017-09-29 19:47:15 26652 7

原创 视图上的委托

1. 委托的概念执行过程  在传统的MVC设计模式中,模型Model负责数据组织,视图View负责数据显示,控制器Contorller负责与用户的输入交互。如下图:  在Qt的模型-视图设计模式中对传统的MVC设计模式做了演变:  视图中集成了处理用户的输入功能,将与用户输入交互功能作为视图内部独立的子功能而实现,即委托(Delegate)。委托对象负责创建/显示用户输入上下文,如编辑框的创建和显示

2017-09-22 19:47:11 559

原创 万能数据类型QVariant类

前面学习了Qt中的模型-视图,在模型中有一个常用的模型类,通用模型类QStandardItemModel,它是既支持表格形式存放数据项,又支持树形存放数据项的模型,在日常开发中比较常用。在讲解QVariant类之前,先来看看通用模型类QStandardItemModel。1. 通用模型类QStandardItemModel  作为一个通用模型类,QStandardItemModel能够以任意方式(线

2017-09-22 11:52:14 6715 2

原创 当c++中的联合体遇到类的构造函数

在学习Qt的QVariant时,Qt Create的说明手册中说道:Because C++ forbids unions from including types that have non-default constructors or destructors, most interesting Qt classes cannot be used in unions.   大概意思是:因为c++禁

2017-09-22 10:29:33 4202 2

原创 Qt中的模型-视图

做GUI应用程序开发的同学想必都知道MVC设计模式,MVC即Model-View-Controller,模型-视图-控制器。现我试图将Qt中的“MVC”讲清楚,先从简单的模型-视图说起。1. 模型-视图基本概念  模型-视图中,模型用于数据的存放/管理,视图用于数据的显示。模型-视图的核心思想是将模型和视图解耦,即将二者分离:模型对外提供标准接口,通过接口外界可以存取数据,模型不需要关心数据的显示;

2017-09-21 17:13:22 2574 1

原创 TCP协议的3次握手以及4次挥手

所谓“挥手”“握手”无非就是数据包的传送,“3次握手”“4次挥手”即在TCP客户端和服务器之间有3个/4个数据包传送。关于这两个概念,特别是“3次握手”,似乎面试官老喜欢问这个。结合网上相关文章,简单做个总结。 1. TCP连接3次握手  TCP对话的需经过3次握手才能建立: Syn(Synchronous):建立连接Ack(Acknowledgement):确认Seq(Sequence

2017-09-20 17:04:36 406

原创 Qt中的事件处理机制

以ubuntu上的gedit文本编辑器为例,当我们修改了文件内容,在不加以保存的前提下关闭窗口,编辑器就会弹窗提示,并让用户做出选择:   要实现这样的功能?如何做?   一开始自然会想到Qt中的信号和槽机制:程序在合适的地方将该信号与某个槽函数连接,当用户点击关闭按钮的瞬间会产生信号,进而槽函数被调用,实现弹窗操作。但是,对于关闭操作,Qt并没有产生相应的信号,即信号与槽机制不可使用。那么要实

2017-09-15 17:34:14 8735 5

原创 Qt中的文件操作

以普通文件为例(文本文件和二进制文件在这里统称为普通文件),它们是存放在计算机的硬盘上的,在Qt中它被视为一种特殊的IO设备,操作IO设备实质上是对一段存储空间(以块为单位)的读写。  QIODevice是一个抽象类(类内含纯虚函数,不可生成对象),为IO设备提供了共同的实现和接口,支持读写QFile、QBuffer和QTCPSocket等以块为单位的数据。IO操作的常用接口有:(1) 打开设备:

2017-09-14 17:41:11 1609

原创 Qt中的文本编辑组件

总结Qt中3种常用的的文本编辑组件:QLineEdit、QPlainTextEdit和QTextEdit,它们的类关系为:  (1) QLineEdit是单行文本编辑组件   (2) QPlainTextEdit是多行普通文本编辑组件   (3) QTextEdit是多行富文本编辑组件  测试代码://main.cpp#include <QtGui/QApplication>#include

2017-09-14 17:24:14 1531

原创 Qt中的主窗口QMainWindow

GUI应用程序都有一个主窗口,虽然前面讲到的QWidget组件也可以定义生成主窗口,但是Qt还定义了一个专门用于实现主窗口的类QMainWindow。为什么?跟QDialog一样的道理,主窗口具有许多主窗口特有的元素组件,为了程序的复用性,Qt在QWidget的基础上“特例化”了一个QMainWindow。GUI程序是由一个主窗口和多个对话框组成,主窗口是与用户进行长时间交互的窗口,是程序启动后显示

2017-09-13 20:07:07 3994

原创 os_mbox.c

定位到uCOS-II/Source/os_mbox.c,该文件是消息邮箱管理的相关操作函数。  任务与任务之间需要数据传递,那么为了适应传递的数据的不同类型,可以建立一个缓冲区(void*类型可以接收不同类型的数据),然后以该缓冲区为介质来实现任务间的切换,这就是消息邮箱的数据传输原理。  消息邮箱的具体实现是:将数据缓冲区的指针赋给事件控制块(OS_EVENT)的成员OSEventPtr(OSEv

2017-09-13 16:06:18 1596

原创 os_sem.c

定位到uCOS-II/Source/os_sem.c,该文件是信号量的相关操作函数。  信号量适用于资源保护的场合,它和互斥型信号量Mutex一样,用于保护着某个共享资源,二者的差别是:Mutex是二值的(0/1),其初始值为1,某任务要操作共享资源,需要获取信号量,获取后信号量计数器为0,那么下一个任务来获取该Mutex将获取不到;而信号量Semaphore的初始值(信号量计数器)可以为大于1的数

2017-09-13 12:38:19 1944

原创 Qt中的布局管理器

Qt中窗口组件的基类QWidget有两组重载函数用于实现窗口组件的绝对定位://定位窗口的坐标void move(const QPoint &) void move(int x, int y)//定义窗口占据的大小void resize(const QSize &) void resize(int w, int h)  存在的问题:   (1) 程序员需要计算/规划组件的坐标   (2)

2017-09-12 20:11:18 5400 4

原创 os_mutex.c

定位到uCOS-II/Source/os_mutex.c,该文件是互斥型信号量的相关操作函数。互斥型信号量也就是互斥锁Mutex,是一个二值(0/1)信号量。在操作共享资源时,使用Mutex可以保证满足互斥条件。1. 非阻塞的获取互斥型信号量函数OSMutexAccept()  OSMutexAccept()用于检测Mutex以判断是否可用,若资源不可用,调用此函数不会使得所在任务被挂起。//允许使

2017-09-09 18:47:53 2622 1

原创 uCOS-II中任务的优先级翻转现象

什么是可剥夺型内核?若当前进程只是在进程执行结束,或者因某种原因而自动放弃CPU的使用权,导致其他的就绪任务获得CPU的使用权,这种方式实现的处理器使用权转移的内核属于不可剥夺型内核,反之,若当前进程并未执行完毕,它又不愿放弃CPU的使用权,而被强制终止执行,使得CPU的使用权归其他进程,这种内核属于可剥夺型内核。  uCOS-II的内核属于可剥夺型内核。任务优先级反转则出现于可剥夺型的内核中:当任

2017-09-09 12:46:21 5088 4

原创 Qt中的对话框

对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示。QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件。  QWidget是所有窗口类的抽象,它也可以生成对话框,但是对话框是常见的窗口组件,若每次要使用对话框,都利用QWidget来生成并设置相关参数,显然十分繁琐。所以Qt为我们封装了另外一个子类QDialog,专门用于生成对话

2017-09-08 18:44:18 7764

原创 窗口组件

在Qt应用程序源码目录中有.pro文件,开头有:QT += core gui  意思是使用core和gui库。这个是Qt的默认配置,可以省略。如果要使用其他库,例如数据库,那么加上:QT += core gui sql  头文件包含了所有的窗口组件,对位于应上述的gui(库)模块。Qt以面向对象的方式将组件看做是一个个对象而构成GUI图形界面。所有的组件可分为三类:   (1)

2017-09-08 09:22:43 1440

原创 中缀表达式转后缀表达式

栈的使用场景之一,中缀表达式转为后缀表达式。  将中缀表达式拆分成各个数字和运算符,并去除了括号,存到数组(或者容器、队列)中,遍历之:若是数字,直接存放到用于输出的数组(或者容器、队列)中若是”(“压栈若是”)”持续出栈,直至出栈的是”(“或者栈为空(括号不输出,直接丢弃)若是加减乘除运算符,则与栈顶运算符比较,当前运算符若大于栈顶运算符,则将当前运算符入栈;当前运算符若小于等于栈顶运算符

2017-09-07 17:00:13 465

原创 c++类的二阶构造

c++类的二阶构造函数主要适用于在构造函数申请系统资源的场景。普通构造函数的作用是初始化对象,若在初始化过程中不能按照程序员预期的进行,那么将会得到一个半成品对象。以下面代码为例:using namespace std;class SecondOrder{private: char* pchar; int val;public: SecondOrder() {

2017-09-07 11:00:55 2234

原创 Qt是什么好玩的

Qt是1991年奇趣科技开发的一个跨平台的c++图形用户界面应用程序框架,它除了能提供给应用程序开发者建立图形用户界面所需要的功能外,还继承了很多第三方资源,如数据库、网络/多线程编程等,因此Qt既可以开发GUI程序,也可用于开发非GUI程序。  跟Qt放在一起讨论的是Qt Creator,它是用于Qt开发的轻量级跨平台继承开发环境,该IDE集成了c++代码编辑器,可视化调试器,源代码管理、项目构建

2017-09-03 15:28:10 778

原创 GUI程序设计原理

GUI(Graphical User Interface)即图形用户接口,是指用图形方式显示计算机操作的用户界面。相比于早期的计算机使用的命令行,图形界面对于用户来讲更易于接受。1. 命令行应用程序  命令行应用程序是一种基于顺序执行结构的可执行程序,如Linux操作系统上的ls、gcc、ifconfig命令。这种可执行程序在执行过程中并不需要与用户交互,程序执行到最后后用户运行结果,如产生一个可执

2017-09-03 13:05:53 29548 2

原创 os_task.c

定位到uCOS-II/Source/os_task.c,该文件是任务的相关操作:1. 修改任务优先级函数OSTaskChangePrio()  OSTaskChangePrio()适用于用户动态改变一个任务的优先级,但新的优先级必须符合要求。#if OS_TASK_CHANGE_PRIO_EN > 0uINT8U OSTaskChangePrio (INT8U oldprio, INT8U

2017-09-02 11:12:36 2677

Linux内核链表(移植完成)

linux内核链表设计的得十分巧妙,代码将其从内核代码总移植出来,可适用于应用程序软件。

2018-02-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除