<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zmcomputer的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zmcomputer</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zmcomputer]]></copyright><item><title><![CDATA[工作后感想]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/7998259</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/7998259</guid><author>zmcomputer</author><pubDate>Wed, 19 Sep 2012 23:36:31 +0800</pubDate><description><![CDATA[好久好久没上微博写过日记了。不知不觉已工作了一年，想念以前在学校的日子，无忧无虑，没有约束，身边一群好基友。想玩就玩，想学习就学习。。。
 在金山软件也呆了一年了，没有什么不好也没有什么特别值得提起。工作了，日子过得平平淡淡，越来越觉得缺乏动力……
夜深了，突然想起我还有个曾经努力经营的博客，那时多开心……回不去的往往只剩下回忆]]></description><category></category></item><item><title><![CDATA[OpenCV读取AVI文件]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/6567259</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/6567259</guid><author>zmcomputer</author><pubDate>Sat, 25 Jun 2011 13:04:00 +0800</pubDate><description><![CDATA[ 今天看到网上很多人问，cvCreateFileCapture读取avi，为什么总是返回NULL. 我查了查文献，总结如下： （源程序附在最下）问题：为什么我的电脑支持AVI或者能够播出AVI，但为什么使用cvCreateFileCapture函数总返回NULL呢？答案：尽管是AVI文件，但也可能使用了某种codec，例如:MJPEG Decompressor。 需要把它转换O]]></description><category></category></item><item><title><![CDATA[#pragma pack 与#pragma pack(push,1)]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/6066224</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/6066224</guid><author>zmcomputer</author><pubDate>Thu, 09 Dec 2010 18:03:00 +0800</pubDate><description><![CDATA[<br />#pragma pack是指定数据在内存中的对齐方式，<br /> <br />在C语言中，结构是一种复合数据类型，其构成元素既可以是基本数据类型（如int、long、float等）的变量，也可以是一些复合数据类型（如数组、结构、联合等）的数据单元。在结构中，编译器为结构的每个成员按其自然对界（alignment）条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储，第一个成员的地址和整个结构的地址相同<br />(1) #pragma pack(1)<br />     作用：调整结构体]]></description><category></category></item><item><title><![CDATA[调试寄存器和测试寄存器]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5908227</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5908227</guid><author>zmcomputer</author><pubDate>Sun, 26 Sep 2010 20:47:00 +0800</pubDate><description><![CDATA[<br />1．调试寄存器<br />80386为调试提供了硬件支撑。在80386芯片内有8个32位的调试寄存器DR0~DR7，如图2.6所示。<br />     这些寄存器可以使系统程序设计人员定义4个断点，用它们可以规定指令执行和数据读写的任何组合。DR0~DR3是线性断点地址寄存器，其中保存着4个断点地址。DR5、DR6是两个备用的调试寄存器，目前尚未定义。DR6是断点状态寄存器，其低序位是指示符位，当允许故障调试并检查出故障而进入异常调试处理程序（debug()）时，由硬件把指示符位置1，调试异常]]></description><category></category></item><item><title><![CDATA[AT&T汇编指令总结]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5908206</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5908206</guid><author>zmcomputer</author><pubDate>Sun, 26 Sep 2010 20:25:00 +0800</pubDate><description><![CDATA[<br />1.寄存器引用 <br />   引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。 <br />    80386有如下寄存器： <br />    8个32-bit寄存器 %eax，%ebx，%ecx，%edx，%edi，%esi，%ebp，%esp； <br />    8个16-bit寄存器 它们事实上是上面8个32-bit寄存器的低16位：<br />                   %ax，%bx，%cx，%dx，%di，%si，%bp，%sp； <br ]]></description><category></category></item><item><title><![CDATA[控制寄存器(CR0,CR1,CR2,CR3)]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5908203</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5908203</guid><author>zmcomputer</author><pubDate>Sun, 26 Sep 2010 20:24:00 +0800</pubDate><description><![CDATA[<br />控制寄存器<br />（控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。）<br />    从上表可见，80386有四个32位的控制寄存器，分别命名位CR0、CR1、CR2和CR3。但CR1被保留，供今后开发的处理器使用，在 80386中不能使用CR1，否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位，包含启用和禁止分页管理机制的控制位，包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及]]></description><category></category></item><item><title><![CDATA[GCC和GDB常用参数]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5883541</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5883541</guid><author>zmcomputer</author><pubDate>Tue, 14 Sep 2010 14:59:00 +0800</pubDate><description><![CDATA[<br />linux下有两种格式的库文件， <br />.a ：传统的静态型函数库<br />.so和 .sa ：共享型函数库<br />GCC是C语言的编译器，编译过程经过的步骤有： 1. 预处理（也称预编译）：文件包含include、define等，生产 .i 文件 C++ 生成.ii  <br /> 2. 编译：生成 .s的汇编文件<br /> 3. 汇编：生成 .o 的目标文件<br /> 4. 连接 ld：生成可执行文件<br /> <br />gcc hello.c -I /home/incl]]></description><category></category></item><item><title><![CDATA[Qt拖放技术之一]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5881025</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5881025</guid><author>zmcomputer</author><pubDate>Mon, 13 Sep 2010 15:00:00 +0800</pubDate><description><![CDATA[拖放 Drag and Drop，有时又被称为 DnD，是现代软件开发中必不可少的一项技术。它提供了一种能够在应用程序内部甚至是应用程序之间进行信息交换的机制，并且，操作系统与应用程序之间进行剪贴板的内容交换，也可以被认为是 DnD 的一部分。DnD 其实是由两部分组成的：Drag 和 Drop。Drag 是将被拖放对象“拖动”，Drop 是将被拖放对象“放下”，前者一般是一个按下鼠标的过程，而后者则是一个松开鼠标的过程，这两者之间鼠标一直是被按下的。当然，这只是一种通常的情况，其他情况还是要看应用程序的具]]></description><category></category></item><item><title><![CDATA[Qt 国际化(上)]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5878700</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5878700</guid><author>zmcomputer</author><pubDate>Sun, 12 Sep 2010 10:25:00 +0800</pubDate><description><![CDATA[Qt中的国际化的方法有很多，常用的有使用QTextCodec类和使用tr()函数。前者将编码名称写到代码里面，除非你使用Unicode编码，否则国际化依然是一个问题；后者就不会有这个问题，并且这也是Qt推荐的做法。因此，我们主要来说使用tr()函数的方法进行应用程序的国际化。 我们先来看一个很简单的MainWindow。为了清楚起见，这里只给出了cpp文件的内容： #include "mainwindow.h"<br /><br />MainWindow::MainWindow(QWidget *paren]]></description><category></category></item><item><title><![CDATA[Qt Graphics View Framework ]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5877111</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5877111</guid><author>zmcomputer</author><pubDate>Sat, 11 Sep 2010 08:47:00 +0800</pubDate><description><![CDATA[现在基本上也已经到了2D绘图部分的尾声，所谓重头戏都是在最后压轴的，现在我们就要来看看在绘图部分功能最强大的Graphics View。我们经常说KDE桌面，新版本的KDE桌面就是建立在Graphics View的基础之上，可见其强大之处。 Qt的白皮书里面这样写道：“Qt Graphics View 提供了用于管理和交互大量定制的 2D 图形对象的平面以及可视化显示对象的视图 widget，并支持缩放和旋转功能。Graphics View 使用 BSP（二进制空间划分）树形可非常快速地找到对象，因此即使是]]></description><category></category></item><item><title><![CDATA[绘图设备 QPixmap、QBitmap QImage]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5877096</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5877096</guid><author>zmcomputer</author><pubDate>Sat, 11 Sep 2010 08:27:00 +0800</pubDate><description><![CDATA[绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类，分别是QPixmap、QBitmap、QImage和QPicture。其中，QPixmap专门为图像在屏幕上的显示做了优化，而QBitmap是QPixmap的一个子类，它的色深限定为1，你可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像素级访问做了优化。QPicture则可以记录和重现QPainter的各条命令。下面我们将分两部分介绍这四种绘图设备。<]]></description><category></category></item><item><title><![CDATA[Qt之Gradient渐变填充]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876734</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876734</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 22:15:00 +0800</pubDate><description><![CDATA[前面说了有关反走样的相关知识，下面来说一下渐变。渐变是绘图中很常见的一种功能，简单来说就是可以把几种颜色混合在一起，让它们能够自然地过渡，而不是一下子变成另一种颜色。渐变的算法比较复杂，写得不好的话效率会很低，好在很多绘图系统都内置了渐变的功能，Qt也不例外。渐变一般是用在填充里面的，所以，渐变的设置就是在QBrush里面。<br /><br />Qt提供了三种渐变画刷，分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient)]]></description><category></category></item><item><title><![CDATA[Qt的事件过滤器]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876632</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876632</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 21:12:00 +0800</pubDate><description><![CDATA[Qt创建了QEvent事件对象之后，会调用QObject的event()函数做事件的分发。有时候，你可能需要在调用event()函数之前做一些另外的操作，比如，对话框上某些组件可能并不需要响应回车按下的事件，此时，你就需要重新定义组件的event()函数。如果组件很多，就需要重写很多次event()函数，这显然没有效率。为此，你可以使用一个事件过滤器，来判断是否需要调用event()函数。<br /><br />QOjbect有一个eventFilter()函数，用于建立事件过滤器。这个函数的签名如下：<b]]></description><category></category></item><item><title><![CDATA[事件接收与忽略]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876552</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876552</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 20:11:00 +0800</pubDate><description><![CDATA[<br />本章内容也是关于Qt事件。或许这一章不能有一个完整的例子，因为对于事件总是感觉很抽象，还是从底层上理解一下比较好的吧！<br /><br />前面说到了事件的作用，下面来看看我们如何来接收事件。回忆一下前面的代码，我们在子类中重写了事件函数，以便让这些子类按照我们的需要完成某些功能，就像下面的代码：void MyLabel::mousePressEvent(QMouseEvent * event)<br />{<br />        if(event->button() == Qt::Lef]]></description><category></category></item><item><title><![CDATA[QPainter]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876493</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876493</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 19:27:00 +0800</pubDate><description><![CDATA[多些大家对我的支持啊！有朋友也提出，前面的几节有关event的教程缺少例子。因为event比较难做例子，也就没有去写，只是把大概写了一下。今天带来的是新的部分，有关Qt的2D绘图。这部分不像前面的内容，还是比较好理解的啦！所以，例子也会增加出来。 有人问豆子拿Qt做什么，其实，豆子就是在做一个Qt的画图程序，努力朝着Photoshop和GIMP的方向发展。但这终究要经过很长的时间、很困难的路程的，所以也放在网上开源，有兴趣的朋友可以来试试的呀… 好了，闲话少说，来继续我们的学习吧！ Qt的绘图系统允许使用相]]></description><category></category></item><item><title><![CDATA[事件(event)]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876413</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876413</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 18:31:00 +0800</pubDate><description><![CDATA[一般来说，使用Qt编程时，我们并不会把主要精力放在事件上，因为在Qt中，需要我们关心的事件总会发出一个信号。比如，我们关心的是QPushButton的鼠标点击，但我们不需要关心这个鼠标点击事件，而是关心它的clicked()信号。这与其他的一些框架不同：在Swing中，你所要关心的是JButton的ActionListener这个点击事件。 Qt的事件很容易和信号槽混淆。这里简单的说明一下，signal由具体对象发出，然后会马上交给由connect函数连接的slot进行处理；而对于事件，Qt使用一个事件队列]]></description><category></category></item><item><title><![CDATA[自定义QMessageBox]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876156</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876156</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 16:54:00 +0800</pubDate><description><![CDATA[如果我们想自定义图片的话，也是很简单的。这时候就不能使用这几个static的函数了，而是要我们自己定义一个QMessagebox来使用： QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon."); <br />message.setIconPixmap(QPixmap("icon.png")); <br />message.exec(); 这里我们使用的是exec()函数，而不是show()，因为这是一个模态对话框，需要有]]></description><category></category></item><item><title><![CDATA[Qt标准对话框之QColorDialog]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5876057</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5876057</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 16:21:00 +0800</pubDate><description><![CDATA[继续来说Qt的标准对话框，这次说说QColorDialog。这是Qt提供的颜色选择对话框。 使用QColorDialog也很简单，Qt提供了getColor()函数，类似于QFileDialog的getOpenFileName()，可以直接获得选择的颜色。我们还是使用前面的QAction来测试下这个函数：         QColor color = QColorDialog::getColor(Qt::white, this); <br />        QString msg = QString("r]]></description><category></category></item><item><title><![CDATA[Qt  parent参数作用]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5875977</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5875977</guid><author>zmcomputer</author><pubDate>Fri, 10 Sep 2010 15:50:00 +0800</pubDate><description><![CDATA[这是一篇很简单的文章，仅仅是用来说明一下一个参数的作用，因此我把它写成了tip，而不是接下来的17. 程序写的多了，你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的。很多情况下它都会有一个初始值0，因此，即便你不去给它复制也没有丝毫的问题。于是，稍微偷懒一下，就会不自觉的忽略了这个参数。那么，这个参数到底是干什么用的呢？ 其实，这个参数有很多用处。就像它的名字一样，这个参数指定了组件的父组件。对于一个对话框来说，对话框一般是不作为]]></description><category></category></item><item><title><![CDATA[实模式与保护模式（转）]]></title><link>https://blog.youkuaiyun.com/zmcomputer/article/details/5870240</link><guid>https://blog.youkuaiyun.com/zmcomputer/article/details/5870240</guid><author>zmcomputer</author><pubDate>Wed, 08 Sep 2010 10:37:00 +0800</pubDate><description><![CDATA[<br />80x86 CPU有3个模式<br /><br />1:实模式<br />是CPU启动的时候的模式<br />这时候就相当于一个速度超快的8086<br />不能使用多线程<br />不能实现权限分级<br />还不能访问20位以上地址线,也就是说只能访问1M内存(!!!)<br />2:保护模式<br />操作系统接管CPU后.<br />会使CPU进入保护模式.<br />这时候可以发挥80x86的所有威力..<br />包括权限分级.内存分页.等等等等各种功能<br />3:虚拟8086模]]></description><category></category></item></channel></rss>