自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Seanyxie Blog

[email protected] 我奔向太阳,在日落的终点必能找到你 www.seanyxie.com

  • 博客(240)
  • 资源 (4)
  • 收藏
  • 关注

转载 Qt之美(三)隐式数据共享

<br /><br />为了最大化资源使用,和最小化数据拷贝,Qt在很多类中用到了隐式数据共享,以便数据仅在被写入时才被拷贝。该机制也被称为flyweight模式。<br />让我们以QByteArray为例,看看其是如何实现的。其内部使用一个名为Data的私有结构体来追踪共享的数据:<br /> struct Data {    QBasicAtomicInt ref; // 引用计数器,对其的操作是原子的    int alloc; // 已分配的空间大小    int size; // 数据的实际大小

2011-01-06 13:12:00 4623

转载 Qt之美(二)元对象

<br /><br />除了D指针,Qt中另一个很有意思的部分就是Q_OBJECT宏了。该宏提供了对元对象的访问,使得能够使用比如信号和槽等QObject的更多特性。元对象提供了诸如类名、属性和方法等的信息,也被称为“反射”。<br /><br />通过使用QMetaObject,我们能够用如下代码显示一些类的信息:<br /> QObject obj;  const QMetaObject *metaObj = obj.metaObject();  qDebug() << "class name: " <

2011-01-06 13:10:00 2813

转载 Qt之美(一) D指针/私有实现

<br /><br />相信不少刚开始阅读Qt源代码的朋友在看到其中的Private类和诸如Q_D、Q_Q等宏时都会思考,为什么Qt要用这样一个设计模式呢?这样一段增加了不少复杂度的代码,到底有多大的好处呢?简单的说,这样的好处在于保证代码的二进制兼容性。<br />什么是二进制兼容性?大名鼎鼎的KDE项目是这样介绍的:一个库是二进制兼容的,如果一个程序和某个库的某个版本动态链接,并且不需要重新编译,即可在安装有该库较新版本的环境中运行。为什么要保证二进制兼容性?如果不能保证库的二进制兼容性,就意味着每次发

2011-01-06 13:07:00 2514 1

原创 Qt应用程序只运行一个实例

<br />在实际应用中,我们经常需要让应用程序只有一个实例,再打开新的文档或者页面时,只是替换现在的窗口或者新打开一个标签,而不是重新启动一次应用程序。Qt中是否可以做到这样呢,答案是肯定的,因为Qt本身可以直接调用系统API,肯定可以做到,但是我们希望找到一个跨平台的通用的解决方案。 <br /> <br />这就要用到Qt的QLocalSocket,QLocalServer类了,这两个类从接口上看和网络通信socket没有区别,但是它并不是真正的网络API,只是模仿了而已。这两个类在Unix/Linu

2011-01-05 16:18:00 3300

原创 基于Linux的多线程安全队列

<br />线程队列头文件  threadqueue.h<br />#ifndef THREADQUEUE_H_ .#define THREADQUEUE_H_ #include <pthread.h> #include <iostream> using std::cout; using std::endl; const int QUEUESIZE = 20; template<class Object> class Thr

2010-12-30 11:37:00 4395 1

转载 MP3文件格式解析

<br />最近做的一个项目,移植libmad到micro2440上,使用QT写一个界面,来作为madplay的前端,播放mp3,关于libmad的介绍就不多说了,还有madplay,一直没有办法获取歌曲的时间长度,刚开始想到了使用开源的库taglib或者libid3tag,后来taglib没有移植成功,放弃了移植库的这个想法,然后找资料去了解MP3的文件格式,自己来计算时间长度,下面是找到的关于MP3文件格式的资料<br />总体来讲就是<br />时间=文件长度/每帧长度*0.026s<br />每帧长

2010-12-26 13:36:00 4959 1

原创 Qt同时支持触摸屏和USB鼠标

<br />在/etc/profile中添加环境变量<br />export set QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 Intellimouse:/dev/input/mouse0"<br />刚开始只写了export set QWS_MOUSE_PROTO=TSLIB:/dev/input/event0<br />所以只会支持触摸屏<br />只有在插上了USB鼠标后才会在input下产生设备节点mouse0<br /> <br />QWS_MOUSE_PR

2010-12-22 20:46:00 5402 1

原创 Linux安装madplay以及设置共享库连接

首先再在所需的四个文件,分别是zlib-1.2.3.tar.gzlibid3tag-0.15.1b.tar.gz ,用来获取媒体文件的tag,保存了一些曲目信息libmad-0.15.1b.tar.gz ,解码库madplay-0.15.2b.tar.gz  ,应用程序源码包按照上面的顺序进行解压缩,源码包就到网上下载好了,我这里也有~~Mkdir /root/Qtmp3tar –xzvf libid3tag-0.15.1b.tar.gz –C /root/Qtmp3tar –xzvf libmad-0.1

2010-12-20 19:06:00 2747 1

原创 二叉树的三种遍历方法(递归和非递归)

<br />二叉树类的头文件“树.h”<br />#include<iostream>#include<stack> //STL#include<queue>using namespace std;class Tree{public: Tree *Left; Tree *Right; char data; Tree(); //成员函数 void CreateTree(Tree* &node); //递归的遍历二叉树 void PreOrderV

2010-12-17 13:53:00 3226 2

原创 进一步了解vfork()函数

<br />在《UNIX环境高级编程》一书的第八章中,有一道课后习题如下:<br />回忆图7-3典型的存储空间布局。由于对应于每个函数调用的栈帧通常存储在栈中,并在调用 vfork后,子进程运行在父进程的地址空间中,如果不是在main函数中而是在另一个函数中调用vfork,以后子进程从该函数返回时,将会发生什么情况?<br />作者Rich Stevens是一位大师,留下这么一题必有其深意,于是结合《深入理解计算机系统》中的知识,写了个程序验证了下,受益良多。<br />         首先回忆下程序运

2010-12-12 23:16:00 2859 4

原创 C++的虚伪

<br />虚基类<br /> 当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为   <br />虚基类<br />虚基类. <br />  在继承中产生歧义的原因有可能基类是继承类继承了基类多次,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。虚的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把基类继承声明为虚拟的,就只能继承基类的一份拷贝,从而消除

2010-12-11 01:03:00 1400

原创 由fork()和vfork()回忆下OS的内存管理

<br />使用fork产生的子进程复制了父进程的代码段和数据段,<br />我们现在假定在父进程中有一个变量var,初始值为88<br />子进程也有一个var,初始值也是88,修改子进程的var,父进程的var并不改变<br />而且父进程和子进程的代码段和数据段是完全一样的,<br />所以父进程和子进程中var的逻辑地址也是完全一样的,<br />{<br />逻辑地址实际上是段内偏移量,就是该变量在该进程空间中数据段的偏移量<br />要求得他的物理地址,要根据操纵系统的段式内存管理方法,来求得他

2010-12-09 11:46:00 1403 1

原创 程序员,对自己好点吧!

<br />昨天在Google图片中输入“程序员”,搜索到的第一张图片是这样的<br /><br />一位平头兄桌上两台笔记本一台台式机。其中的一台中显示是某个论坛的页面【估计正在回答某个问题】、中间那台正在启动Eclipse【要开始写Java程序了】、平头兄的目光此时盯在台式机的显示器上【应该是正在远程或者是某个虚拟机】,旁边还有一本打开的书…<br />图片的名字是“真正的程序员就应该这样”,程序员就应该这样么? <br />是谁规定程序员就应该是这样的,本来是应该四个人做的事情让一个程序员做,难道程序

2010-12-07 23:41:00 2032

转载 编程带给我的习惯

<br />1. 编程已给我带来很多坏习惯,编程也每天在继续给我新增更多的坏习惯。当然有些习惯和编程无关了。下面这些习惯尽管我也很想改掉,但已根深蒂固。<br />  * a. 在天地万物中,去发现多态、继承和模式;<br />  * b. 用十六进制代码中的像素和颜色来解释某东西的大小;<br />  * c. 在日常交谈中用代码相关的抽象术语。<br /><br />2. 我现在认为256这个数字非常完美。但非程序员不明白这个,有时候让我措手不及。<br />编者评:1024呢?<br />3. 我在看

2010-12-07 23:05:00 1110

原创 C++的重写,重载,重定义

1. 重写 (override):      父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的,或者是 override 的 ( 即函数在最原始的基类中被声明为 virtual , c++ 中没有 override) 。2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)3) 重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected

2010-12-03 15:08:00 8099

原创 Linux修改用户组

<br />usermod -g group loginname <br />强行设置某个用户所在组<br /><br /><br />usermod -G groups loginname<br />把某个用户改为 group(s) <br /><br />usermod -a -G groups loginname<br />把用户添加进入某个组(s)<br />

2010-11-30 21:22:00 37014

原创 Qt出现错误“undefined reference to `vtable for XXXXX.XXX”

<br />如果新建一个类,继承了某个类,在这个类的头文件中式没有 Q_OBJECT宏声明的,如果想使用signal-slot信号,就需要添加Q_OBJECT宏,但是添加了这个宏后,就可能会出现这种错误,“undefined reference to vtable for LcdNumber”的编译错误<br />这是因为在Makefile里面没有这个类并没有Q_OBJECT信息,所以在执行Makefile时候也就没有moc xxx.h这条命令,最终导致连接失败。<br />知道了这个原因后,解决方法就很简

2010-11-28 20:26:00 5525 7

原创 递归方法的非递归实现

递归是一种自顶向下的方法,直到方法知道如何解决最简单的问题,递归算法需要一个线性的空间开销,并且需要不断的压栈与出栈。一般来讲,非递归算法的资源开销比递归算法低。那么,我们如何实现阶乘的非递归的算法呢?我们只需要反过来想,既然递归采用的是自顶向下的方法,那么我们非递归就可以采用自底向上的方法来实现#includeusing namespace std;int JieCheng(int num);void main(){ int num; cout>num; num=JieChen

2010-11-20 21:19:00 1883

原创 sizeof的用法细节

sizeof的用法sizeof的结果是预编译时候的结果。也就是说编译时候就知道了他的结果。sizeof 的操作对象可以是一个变量也可以是一个表达式,可以使一个对象或者类型名当操作对象是变量或者变量类型时候1、如果是整形,或者char型的则直接输出他的大小。2、如果是指针  int i=0;  char ch[3]={'a','b','c'};  char *p=ch;  cout  cout  cout                                  //但是这里却可以解引用p,结果输出的

2010-11-18 23:07:00 1575

原创 找出孤独的一个(IBM面试题)

小明有N双袜子,丢了一只,怎么样才能快速找到丢掉的那只袜子?假设每双袜子都不一样,用一个7位的数字来表示,相同的袜子,代表的数字相同,例如他有两双袜子,分别用55和66这两个数字来代替表示,则表示成二进制就是110111,110111,1000010,则丢掉的那只是66号袜子。请问怎么快速找出来丢掉的是66号袜子呢?方法:从头到尾遍历所有袜子的编码,然后把每一个袜子的编码相异或,最后留下来的那个就是丢掉的那只袜子的编码。#includeusing namespace std;void main()

2010-11-16 13:32:00 1975

原创 QGrapicsView类

<br />QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置view的场景,然后调用了show()函数后,view就可以默认的在场景的中心,显示item,例如<br />QGraphicsScene scene;<br /> scene.addText("Hello, world!");<br /> <br /> QGraphicsView view(&scene);<br /> view.

2010-11-14 21:20:00 9575

原创 QGrapicsScene类

概述QgraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QgraphicsView使用来观察items,例如线,矩形,文本或者自定义的items,QgraphicsScene提供了方便的函数来让你高效的找到items的位置,或者决定在scene上哪个item可以看到,配合QgraphicsView窗口,你可以让可见scene,或者缩放

2010-11-14 13:29:00 8339 2

原创 多线程总结

<br />进入run()函数后,新线程就开始运行,有自己的堆栈。<br />出了run()函数后,新建的线程就结束,并会发出信号,可以在另外一个线程中捕获,然后响应。、<br /> currentThreadId()和currentThread()分别会返回线程的ID号和线程对象指针。<br /> <br />最后在run()中调用exec()开始本线程的事件循环。<br />调用exit()或者quit()来退出线程。<br /> <br />QMutex加锁时候,其他的读和写都不能进行<br />他的

2010-11-12 20:59:00 3809

转载 QT多线程续

<br />可重入与线程安全<br />在Qt文档中,术语“可重入 ”与“线程安全 ”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。<br />大多数c++类天生就是可重入的,因为它们典型地仅仅引用成员数据。任何线程可以在类的一个实例上调用这样的成员函数,只要没有别的线程在同一个实例上调用这个成员函数。举例来讲,下面的Counter 类是可重

2010-11-11 00:13:00 1761

转载 QT多线程

<br />Qt线程类 <br />Qt 包含下面一些线程相关的类:<br />QThread 提供了开始一个新线程的方法<br />QThreadStorage 提供逐线程数据存储<br />QMutex   提供相互排斥的锁,或互斥量<br />QMutexLocker 是一个便利类,它可以自动对QMutex 加锁与解锁<br />QReadWriterLock 提供了一个可以同时读操作的锁<br />QReadLocker 与QWriteLocker 是便利类,它自动对QReadWriteLock 加

2010-11-11 00:12:00 2556

原创 动态申请内存的危险处

<br />C++的new给用户动态申请内存带来了很大的方便,但是也带来了一些危险<br />一不小心就会造成内存泄露<br />char *pa=new char[5];然后如果修改了pa指针pa++;或者pa="abcde";<br />这样就导致pa的指向改变,然后delete []pa时候就会错误,导致内存无法回收<br />所以要慎重<br /> <br />后来想如果new返回的是指针常量<br />这样就无法修改指针的指向就无法修改<br />但是申明*pa为const时候,发现s

2010-11-10 13:47:00 1166

转载 大量数据刷新界面时候,放置GUI软件界面僵死

<br />GUI软件开发中,当后台有大量的数据更新需要刷新界面时,往往造成界面假死现象,此时用户的任何鼠标和键盘操作都无效。这种情况一直困扰着许多GUI软件的开发人员。<br />笔者最近正在参与开发一套证券交易系统的客户端, 主要面向日本市场。对于机构用户来讲,几千条甚至上万条的交易数据是很平常的。本系统的Server和client端全部实现消息通讯机制,不通过数据库交换数据。因此当有用户做了几千条交易后(Basket Trade),往往消息的更新量会达到2-3万条。Client端每收到一条消息都会计算

2010-11-09 23:51:00 3374

转载 QTimer,QSound,QWMatrix使用

<br />QSound继承自QObject类,用于访问平台的音频工具。在GUI应用程序中Qt提供了一般绝大数的音频操作:为用户异步地播放声音文件。用一个单一的调用就可以完成这样的一件事:<br /> QSound::play("mysounds/bells.wav");<br />当建立一个声音文件对象,以后再进行播放的时候,提供了第二个API:<br /> QSound bells("mysounds/bells.wav");<br /> bells.play();<br />第二种模式相对第一种模式,

2010-11-09 17:52:00 3352

转载 Qt4怎样设置应用程序的图标-windows平台

<br />,通过搜索Qt Assistant,发现有如下说明:<br />Setting the Application Icon on Windows<br /><br />First, create an ICO format bitmap file that contains the icon image. This can be done with e.g. Microsoft Visual C++: Select File|New, then select the File tab in the

2010-11-09 15:20:00 1983

原创 QGrapicsItem类

<br />这个类翻译了好久,实在是成员函数太多了,分享出来,希望对大家有用,多多支持哦~~<br /> <br />详细介绍<br />QGraphicsItem类是视图框架的一部分,是在一个QGraphicsScene中最基本的图形类,它为绘制你<br /> <br />自己的item提供了一个轻量级的窗口,包括声明item的位置,碰撞检测,绘制重载和item之间的相<br /> <br />互作用通过事件处理<br />Qt提供了一系列标准的items对一些常见的图像,非常的方便,有下面这些:<br

2010-11-08 23:30:00 12020 5

原创 如此写法

<br />今天突然发现C++语言还可以这样写<br />看下面的例子<br />char  ch="hello,QT"[1];<br />结果ch='e'<br /> <br />真失败....第一次见到这样的写法

2010-11-08 22:35:00 1364

转载 Graphics View 坐标系统

<br />Graphics View基于笛卡尔坐标系。item在场景中的位置与几何形状通过x,y坐标表示。当使用未经变形的视图来观察场景时,场景中的一个单位等于屏幕上的一个像素。在Graphics View中有三个有效的坐标系统:Item坐标系,场景坐标系,视图坐标系。为了简化你的实现,Graphics View提供了方便的函数,允许三个坐标系之间相互映射。<br />当渲染时,Graphics View的场景坐标对应于QPainter的逻辑坐标,视图坐标与设备坐标相同。<br /><br />Item坐

2010-11-03 09:42:00 3182 2

原创 Nokia Qt SDK的安装

<br />电脑上装了qt Creator 4.6.2,今天要装Nokia Qt SDK<br />下载了windows和Linux两个版本,先在windows下安装,没有卸载之前的creator 4.6.2<br />然后编译一个例子时候,SDK集成了windows桌面,模拟器,Symbian三个平台的编译,编译windows桌面版本时候没有错,可是编译模拟器时候却出现了异常退出的错误,晕死<br /><br />然后把creator4.6.2卸载,重新安装Nokia QT SDK,错误仍旧,<br />

2010-10-30 21:19:00 1715

原创 对数组名取地址

<br />int a[5]={1,2,3,4,5};<br />int b[100];<br />一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题<br />问题一:<br />看到一篇文章这么写的。。<br />int array[10]; <br />int (*ptr)[10]; <br />ptr=&array;//这里说明&array是指向数组的指针,但为什么&array是指向数组的指针? <br />答一:<br />对数组名取地址在C标准里面是未定义的行

2010-10-26 19:50:00 7521 3

原创 QTcpSocket类和QTcpServer类

QTcpSocket 详细描述:QTcpSocket 类提供一个TCP套接字TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。注意:TCP套接字不能以QIODevice::Unbuffered模式来打开在Symbian系统上,程序想用这个类的话必须拥有NetworkServices平台支持,如果客户机缺少这个能力,将会导致"恐惧"(不明白为什么这么翻译)成员函数:QTcpSock

2010-10-26 16:06:00 18142 17

原创 使用指针在类外修改类的私有变量

<br />类的私有变量在类外是不能访问的,但是这种保护机制仅仅是在编译器编译阶段来检查的,和const是一样,通过指针,我们还是可以访问并且修改的,因为一个类的对象仅仅包括自己的成员数据,所有的成员函数和静态成员变量都是一个实体,该类的所有对象共享这个实体,因此对象的长度是该类所有auto变量的长度,如果该类或者其基类有虚函数,生成的对象还要加上虚函数表的指针的大小,就是vptr的大小,4个字节。关于虚函数和虚函数表,可以参看http://blog.csdn.net/xie376450483/archiv

2010-10-26 12:54:00 2632

原创 类成员变量和成员函数的地址

<br />class 指向成员函数的指针必须与向其赋值的函数类型匹配不是两个而是三个方面都要匹配参数的类型和个数 返回类型 它所属的类类型<br />做下面的一个测试<br />#include<iostream>using namespace std;class A{public: A(int); void fun1(); virtual void fun2(); static void fun3(); int num1; static int num2;};

2010-10-26 09:51:00 3651 3

转载 Qt中各个widget前后位置的设置

<br />关于Qt中各个widget窗口的前后位置是如何定义的<br />在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常用的QWidget体系,而另外一个则是QGraphicsWidget体系。<br />      ①:在常用的QWidget体系中,设置前后位置是主要是用raise(),underStack(),hide()函数。<br />      理论为:在Qt中每个widget窗口都维持着自己的一个创建栈(widget's stack.),栈里边存放的是该窗口所有子widget窗

2010-10-25 23:44:00 4098

原创 C++中虚函数的原理和虚函数表

一, 什么是虚函数简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略,虚函数是C++的多态性的主要体现,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。下面我们从这段代码中来进行分析:#includeusing namespace std;class A{ publ

2010-10-25 16:02:00 2854

原创 QT工程中使用图片的三种方法

图片是一种资源,而在Qt中,对于资源的使用是有其独特的方式的!     ①:一般来说:资源在内存中是用资源对象树来表示的,该树在程序启动时创建。     ②:而对于资源而言:我们都是需要先将其加入到这棵树中才能加载到内存中并被程序使用!!     ③:而将一个图片资源放到程序的资源对象树中是用函数QResource::registerResource()来实现的。亦即:要将资源向这颗资源对象树进行注册,这样才对在系统中new创建这个资“叶子”。Qt中经常会使用一些图片作为程序的界面,经常用的有三种方法,这里

2010-10-25 00:14:00 12321 1

ConsolePro支持最新unity.rar

支持最新版unity console pro,内含dll和unity package导入文件 ,亲测可用

2020-06-04

visual assist x

内含破解包, 支持 包括vs2017 所有版本 亲自测试可以使用

2018-06-30

linux 进程间通信

嵌入式 linux进程间通信原理介绍 有详细的介绍

2010-02-17

VC画曲线图 动态走势图

VC 实现画走势图 画在单文档中,并画有坐标,在坐标中实现动态的曲线表示数据的变化

2009-11-10

空空如也

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

TA关注的人

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