摘要: Introductionhttp://www.codeproject.com/KB/splitter/simpledlgsplitter.aspxI'm a student and very interested in VC++. I often enter this web site to get free source code. I was in need of a splitter in a dialog. I downloaded one but it's very complex and I felt it was difficult to use the control (alt 阅读全文
posted @ 2010-12-20 21:22 maxweii 阅读(418) 评论(0) 推荐(0) 编辑
摘要: VC++6.0控件工具箱: 2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):用来在指定的位置显示特定的字符串,一般用来标识附近另一个控件的内容。显示在静态文本控件中的字符串一般不再改变,但是在需要的时候,也可以通过调用相应的函数来进行设置。MFC提供了CStatic类支持静态控件。4 编辑框(Edit Box):用来接收用户输入的字符串。通过选择编辑框的选项,编辑框可以接收字符串、数字、密码等;编辑框还可以设置成接收多行字符串的模式;可以自动进行大小写转换。编辑框可能向其父窗口发送多种控件通知,如果用户需要,可以对这些控件 阅读全文
posted @ 2010-12-20 19:42 maxweii 阅读(8408) 评论(0) 推荐(0) 编辑
摘要: 1、 将 Invalidate()替换为 InvalidateRect()   Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而 InvalidateRect()仅仅重画 Rect 区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用 Invalidate(),不愿意自己去计算需要重画的 Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个 Rect 所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。2、 禁止系统搽除你的窗口  系统在需要重画窗口的时候会帮你用指定的背景色来搽除窗口。可是,也许需要重画的区域也许非常小。或者,在 阅读全文
posted @ 2010-12-20 16:48 maxweii 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 其实,有无标题栏无所谓,本文要实现的是点击客户区实现拖动.目前,很多基于对话框的应用程序中对话框都是不带框架的,也就是说对话框没有标题栏。众所周知,窗口的移动都是通过鼠标拖动窗口的标题栏来实现的,那么现在应用程序中的对话框没有了标题栏,用户如何移动对话框呢?本实例针对这个问题提出解决的办法。程序编译运行后的界面效果如图一所示:图一、无标题栏的对话框界面 一、实现方法解决无标题栏窗口的拖动问题有两种方案,一种方案是使用常规思路来处理鼠标拖拽事件,当窗口获得WM_LBUTTONDOWN(OnLButtonDown)时,通过设置标志并调用CWnd::SetCapture()函数来让当前窗口捕捉鼠标消 阅读全文
posted @ 2010-12-20 15:41 maxweii 阅读(879) 评论(0) 推荐(0) 编辑
摘要: 介绍: 动态分配、回收内存是C/C++编程语言一个最强的特点,但是中国哲学家孙(Sun Tzu,我不知道是谁?那位知道?) 指出,最强的同时也是最弱的。这句话对C/C++应用来说非常正确,在内存处理出错的地方通常就是BUGS产生的地方。一个最敏感和难检测的BUG就是内存泄漏-没有把前边分配的内存成功释放,一个小的内存泄漏可能不需要太注意,但是程序泄漏大块内存,或者渐增式的泄漏内存可能引起的现象是:先是性能低下,再就是引起复杂的内存耗尽错误。最坏的是,一个内存泄漏程序可能用完了如此多的内存以至于引起其他的程序出错,留给用户的是不能知道错误到底来自哪里。另外,一个看上去无害的内存泄漏可能是另一个问 阅读全文
posted @ 2010-12-20 10:40 maxweii 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 一般性问题1. 代码编译通过了,运行后RichEdit控件不显示,在InitInstance中添加BOOL CWinApp::InitInstance (){…AfxInitRichEdit(); - RichEdit 1.0或 AfxInitRichEdit2(); - RichEdit 2.0…}2. 升级默认的RichEdit版本,默认的版本有BUG,在InitInstance中添加BOOL CWinApp::InitInstance (){…LoadLibrary("RICHED20.DLL");…FreeLibrary();}如果是CRichEditView基类的话,可用如下消息机制 阅读全文
posted @ 2010-12-20 01:40 maxweii 阅读(1277) 评论(0) 推荐(0) 编辑
摘要: CButtonST使我目前见过的最强大,功能最全的CButton派生类。撰写本文的目的不在于技术的讨论,而是希望能够为各位提供关于CButtonST的使用参考,以提高编写程序的速度。   下图是用CButtonST做的几个按钮  以下是CButtonST类的一些版本信息,方便大家可以及时获得它的最新版本。  作者:Davide Calabro  邮箱地址:davide_calabro@yahoo.com  个人主页:http://www.softechsoftware.it  CButtonST类主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp四个文件。如果你 阅读全文
posted @ 2010-12-20 00:17 maxweii 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 首先,建立一个基于对话框的工程 test,然后把原BCMenu.cpp, BCMenu.h, BtnST.cpp, BtnST.h 四个文件加入到工程中。 接下来我们开始改造CButtonST 类。   1.打开CButtonST类的头文件BtnST.h 在它的开始部分加入对多媒体头文件及库文件的引用: #include #pragma comment(lib,"Winmm.lib")   2.向CButtonST类中添加两个成员变量和两个成员函数: private: CString SoundID; BOOL m_bPlaySound; public: void PlaySound(); v 阅读全文
posted @ 2010-12-20 00:12 maxweii 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 推测的处理过程:要在标题栏上增加一个问号按钮,得参考一些系统菜单操作API;点这个问号按钮会产生一个系统消息,我在处理这个消息的时候把对话框的鼠标光标改为带问号的指针,用这个带问号的指针点击对话框的某个元素,就产生一个“WM_LBUTTONDOWN”的消息,处理这个消息,根据鼠标光标的位置判定鼠标点击的是对话框上的那个元素,获取这个元素的帮助字符串,创建一个没有Title的很小的窗口,把这个小窗口在鼠标光标位置处Pop出来,然后在上面Draw一些帮助字符串,当这个小窗口失去焦点,或被用户用鼠标点击了一下,或按了一下键盘什么的,就会Hide起来,当用户又执行了上述的“问号点击操作”之后,这个小窗 阅读全文
posted @ 2010-12-19 19:13 maxweii 阅读(1665) 评论(1) 推荐(0) 编辑
摘要: 一、MFC、句柄、控件及结构的命名规范Windows类型样本变量MFC类样本变量HWNDhWnd;CWnd*pWnd;HDLGhDlg;CDialog*pDlg;HDChDC;CDC* pDC;HGDIOBJhGdiObj;CGdiObject*pGdiObj; HPENhPen;CPen*pPen;HBRUSHhBrush;CBrush*pBrush;HFONThFont;CFont*pFont;HBITMAPhBitmap;CBitmap*pBitmap;HPALETTEhPaltte;CPalette* pPalette;HRGN hRgn;CRgn* pRgn; HMENUhMenu; 阅读全文
posted @ 2010-12-19 18:56 maxweii 阅读(1066) 评论(0) 推荐(0) 编辑
摘要: MFC框架各部分指针获取方式:记住,是获取指针MFC消息流程图:string CString char* 的互相转换: string 转 CString CString.Format("%s", string.c_str()); //用c_str()比data()好 char 转 CString CString.Format("%s", char*); // 可以直接给CString赋值,不要用Format char* 转 string string s(char *); CString 转 string string s(CString.GetBuff 阅读全文
posted @ 2010-12-19 16:26 maxweii 阅读(1526) 评论(1) 推荐(1) 编辑
摘要: 记住,是获取指针 阅读全文
posted @ 2010-11-29 18:40 maxweii 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 1 前言 当程序的运行结果与程序员预想的不一样,如死机,计算值不正确,出现内存访问冲突等,就需要进行调试2 进行调试前的准备工作 因为程序调试是一项十分耗时的工作,很难估计出将要花费多长时间,因此在调试前,一定要做好充分准备,尽量避免做无用功:1. 构造好的测试步骤,让程序出错有规律性或出错的概率越大越好2. 被调试程序及相关库是最符合要求的版本3. 工程临时文件如.ncb被删除4. 整个工程被重新编译5. 应用程序的链接路经与调试路径保持一致6. 单体测试全部通过3 出错位置和原因的确定3.1 几种典型错误的原因1 内存莫名其妙的失效原因:内存指针被多处引用,被多处释放2 多线程条件下死机原 阅读全文
posted @ 2010-11-27 15:07 maxweii 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 继承 构造函数 析构函数 类继承中构造函数和析构函数的调用现在,有三个类,类的定义如下class CA{public:CA(){cout<<"CA constructor"<<endl;} ~CA(){cout<<"CA desstructor"<<endl;}};class CB:public CA{public:CB(){cout<<"CB constructor"<<endl;}~CB(){cout<<"CB desstructor&q 阅读全文
posted @ 2010-11-04 18:00 maxweii 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 问题:一般情况下我们用UPDATE_COMMAND_UI来修改菜单的状态(enable/disable, check/uncheck, change text),但这个方法在一个基于对话框上的菜单却没有效果。void CTestDlg::OnUpdateFileExit(CCmdUI* pCmdUI) { pCmdUI-Enable(FALSE); pCmdUI-SetCheck(TRUE); pCmdUI-SetRadio(TRUE); pCmdUI-SetText("Close"); //以上方法在MDI、SDI程序中都能起作用,在对话框中却没有效果,根本没有调用这个函数。} 阅读全文
posted @ 2010-10-15 17:48 maxweii 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 一.基本概念 先来看看栈。栈,一般用于存放局部变量或对象,如我们在函数定义中用类似下面语句声明的对象:Type stack_object ; stack_object便是一个栈对象,它的生命期是从定义点开始,当所在函数返回时,生命结束。另外,几乎所有的临时对象都是栈对象。比如,下面的函数定义:Type fun(Type object) ; 这个函数至少产生两个临时对象,首先,参数是按值传递的,所以会调用拷贝构造函数生成一个临时对象object_copy1 ,在函数内部使用的不是使用的不是object,而是object_copy1,自然,object_copy1是一个栈对象,它在函数返回时被释放 阅读全文
posted @ 2010-10-14 10:31 maxweii 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 一、调试基础:调试快捷键F5: 开始调试Shift+F5: 停止调试F10: 调试到下一句,这里是单步跟踪 F11: 调试到下一句,跟进函数内部Shift+F11:从当前函数中跳出Ctrl+F10:调试到光标所在位置F9: 设置(取消)断点Alt+F9:高级断点设置 ctrl+b亦可跟踪调试1、尽量使用快捷键进行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口Release调试1、经常测试你的Debug和Release版本2、不要移除调试代码,如用ASSERT, TRACE等。3、初始化变量,特别是全局变量 阅读全文
posted @ 2010-10-13 13:31 maxweii 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 在运行里输入cmd进入命令提示符。 然后输入命令tasklist /mc:3.txt 回车。。是不是没有任何反应?? 不要急。到C盘下面去找一找,是不是有了一个123.txt?(当然。你可以自己设定文件的输出路径,名字,甚至后缀。但要是文本文件哦。。) 打开他。里面就是目前运行的各个程序正在调用的dll文件。 把不能删除的dll文件的名字记下来。然后到记事本里去编辑-查找。输入对应的dll文件。是不是找出来了?? 找出来了后问题就好办多了。打开任务管理器。把对应的那个程序给关了。。就可以顺利删除了。。那就不必进安全模式,进DOS那么麻烦了。。。 当然。有些应用程序是以服务形式运 阅读全文
posted @ 2010-09-28 18:25 maxweii 阅读(1825) 评论(0) 推荐(1) 编辑
摘要: 在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。目录守护进程简介  守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Lin 阅读全文
posted @ 2010-09-28 17:01 maxweii 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 32位cpu 地址总线扩展成了32位,这和数据总线的宽度是一致的。因此,在32位机里其实并不需要采用“物理地址=段:偏移”这种地址表达方式。原来在16位机里规定的每一个段不大于64kb在32位机里也不是必要的。所以,对于32位机来讲,最简单的方法就是用一个32位数来标识一个字节的存储地址,寻址时只要给出一个32位数就可以直接找到地址。这种地址储存模型就属于“平展储存模型”。但是,新产品一般都希望遵循“向下兼容”这个原则。所以,32位机里完整的保留了16位寻址模式。即:寻址能力为1M;分段机制;每段不超过64kb。这就是通常所说的"实模式"。在地址储存模型中属于“实地址储存模型”。 其次,考虑到 阅读全文
posted @ 2010-09-25 14:41 maxweii 阅读(658) 评论(0) 推荐(0) 编辑
摘要: acrobat professional中:你要在Ctrl+K中的设置点击左侧有一项叫“一般”,然后在右侧的“使用单键加速键访问工具”前打对号,否则没有效果。 工具 快捷键首选项CTRL+K建立标签CTRL+B手形工具【H】快照工具【G】选择工具【V】临时选择手形工具【空格键】轮流选定缩放工具:选择对象元数据工具【Shift+V】轮流选定缩放工具:放大、缩小、动态缩放【Shift+Z】轮流选定缩放工具:放大、缩小、动态缩放、放大镜【Shift+Z】选定当前缩放工具【Z】临时选择放大工具【Ctrl+空格键】临时选择缩小工具【Ctrl+Alt+空格键】临时选择动态缩放工具(当选定了放大或缩小时)【 阅读全文
posted @ 2010-09-17 17:16 maxweii 阅读(985) 评论(0) 推荐(0) 编辑
摘要: 目录跳过目录本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 最后,来点广告…… 网上的资源及本文参考文献 更新纪录 本文目标30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :)别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则 阅读全文
posted @ 2010-09-07 18:20 maxweii 阅读(185) 评论(0) 推荐(0) 编辑
摘要: http://www.gotapi.com/语言:英语简介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查询网站。http://www.w3schools.com/语言:英语简介:W3C制定的标准诸如XML,HTML,XSL等等的在线学习教程。http://www.xml.org.cn/语言:中文简介:可以说是XML的中国官方网吧。W3C标准的翻译组织与XML系列技术交流社区.http://www.connectionstrings.com/语言:英语简介:这里几乎收集了所有的数据库连接字符(connectionstring)了。http://www.itpub.net 阅读全文
posted @ 2010-09-06 13:30 maxweii 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片, 阅读全文
posted @ 2010-09-06 13:26 maxweii 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Lua脚本语法说明(修订)   Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。  所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。估计看完了,就懂得怎么写Lua程序了。  在Lua中,一切都是变量,除了关键字。I. 首先是注释  写一个程序,总是少不了注释的。  在Lua中,你可以使用单行注释和多行注释。  单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。  多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*...*/"。在注释当中,"[["和"]]"是可以嵌 阅读全文
posted @ 2010-09-06 11:24 maxweii 阅读(509) 评论(1) 推荐(0) 编辑
摘要: SciTE中文配置说明2009年10月31日 下午 05:41 非常不错的文本编辑器除了有语法高亮,标签浏览,折叠(尤其是宏折叠),自动完成这些功能外,还具有输出窗口(对于编程的人来说很方便的),自定义工具,最重要的是发现它速度相当快。不过对于新手来说,如果没有正确的配置,它就不是那么好使,比如选择中文时候出现乱码,缩进也不是你想象中的样子。所以下载回来后,我们要自己修改配置文件。运行SciTE,选择菜单“选项–打开Global Options文件”,打开的就是SciTE的全局配置文件,建议不要改动这个文件,以后再改动配置的时候以这个文件作为参考和对照。然后同样打开“User Options 阅读全文
posted @ 2010-09-01 11:35 maxweii 阅读(3805) 评论(0) 推荐(0) 编辑
摘要: 在visual c++下,每编写一个简单的小程序,就得生成一大串中间文件,另人十分的不爽。下面提供一个新的编写c/c++程序的方法:   (1),下载utraledit-32编辑器,推荐v11.  (2),在utraledit-32中,分别点击菜单:高级-工具配置,出现一个dialog,用来设置用户自定义的菜单项。我们的想法是,设置一个编译菜单和运行菜单项,分别用来编译在utraledit-32编写的c/c++源文件。这样,在utraledit-32中编写好程序后,点击这两个菜单,就可以编译程序,和运行程序。运行的结果在utraledit-32的输出框中显示。具体的设置如下。  编译:  1, 阅读全文
posted @ 2010-08-26 10:50 maxweii 阅读(1301) 评论(0) 推荐(0) 编辑
摘要: 1.tags1)安装ctags2)进入源码根目录,输入命令"ctags -R",会在当前目录下生成tags文件3)用vim打开文件后,先输入命令"set tags=tags文件的路径",最好写在.vimrc中4)vim中tag命令的使用ctrl + ] 跳转函数、宏 ctrl + o 回到跳转前的地方ctrl + T 跳到标签栈中较早的标签在命令行中输入"vim -t 函数名" 直接打开文件并跳转函数:tag 函数名(不分大小写) 跳转函数:tags 显示跳转标签栈5)vimrc设置if has("ctags") if filereadable("tags") set tags=tags e 阅读全文
posted @ 2010-08-24 18:32 maxweii 阅读(405) 评论(0) 推荐(0) 编辑
摘要: VI 编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,使它成了效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但VI在系统和服务器管理中的能是那些图形编辑器所无法比拟的。  VI 编辑器是Visual interface的简称,通常称之为VI。它在Linux上的地位就像Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。  VI 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本 阅读全文
posted @ 2010-08-24 18:30 maxweii 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 不经意间,GCC已发展到了4.3的版本,尽管在软件开发社区之外乏人闻问,但因为GCC在几乎所有开源软件和自由软件中都会用到,因此它的编译性能的涨落会直接影响到Linux 、Firefox 乃至于OpenOffice.org和Apache等几千个项目的开发。因此,把GCC摆在开源软件的核心地位是一点也不为过。另一方面,GCC4.3的出现,正在牵引着广大程序员们的心。如果我们非要用一个词来说明GCC与程序员之间的关系,那无疑是"心随心动"。 历史篇作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作 GCC 的时候,还只是把它当作仅仅一个 C 程序语言的编译器;GCC 的 阅读全文
posted @ 2010-08-24 18:28 maxweii 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 本文是我前几天一个网友告诉我的,当时看了感觉好,就保存下来。今天再次查看,感觉有必要把文章分享给各位学习QT 的朋友,因为网上好用的QT 资源真的好少。1、如果在窗体关闭前自行判断是否可关闭答:重新实现这个窗体的closeEvent()函数,加入判断操作Quote:void MainWindow::closeEvent(QCloseEvent *event){if (maybeSave()){writeSettings();event-accept();}else{event-ignore();}}2、如何用打开和保存文件对话答:使用QFileDialogQuote:QString fil 阅读全文
posted @ 2010-08-06 14:41 maxweii 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: 信号和槽是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。在前几个例程中,我们已经连接了信号和槽,声明了控件自己的信号和槽,并实现了槽函数,发送了信号。现在来更深入了解这个机制。槽和普通的c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protective),也可是私有的(private),它们可以象任何c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。connect函数语法如下:connect(s 阅读全文
posted @ 2010-08-06 11:18 maxweii 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 题记:要知道,并不是只有初学者才会犯错。(shiroki的至理名言)最近发现了一些有意思的问题,值得memo一下。先来看段代码:大家看得出这段代码中的问题吗? (呵呵,不要告诉我是cuteqt不能访问哦~)这段代码ms十分标准, 非常符合笔者平时写Qt程序书写main函数的习惯, 孰料想竟然是个错误的习惯,而且问题很严重哦。 给个提示:在程序退出时会aborted。如果还没想出来是什么问题,嘿嘿,没关系,看了下面的答案你就明白了。在这段程序里QApplication实例创建在stack上,生命期是main的大括号内, 而mw则通过new创建在heap上, 在程序退出时才会被析构。 换句话说,m 阅读全文
posted @ 2010-08-05 19:11 maxweii 阅读(509) 评论(0) 推荐(1) 编辑
摘要: 在上一节里我们使用TCP服务器发送一个字符串,然后在TCP客户端进行接收。在这一节我们重新写一个客户端程序和一个服务器程序,这次我们让客户端进行文件的发送,服务器进行文件的接收。有了上一节的基础,这一节的内容就很好理解了,注意一下几个信号和槽的关联即可。当然,我们这次要更深入了解一下数据的发送和接收的处理方法。一、客户端这次我们先讲解客户端,在客户端里我们与服务器进行连接,一旦连接成功,就会发出connected()信号,这时我们就进行文件的发送。在上一节我们已经看到,发送数据时我们先发送了数据的大小信息。这一次,我们要先发送文件的总大小,然后文件名长度,然后是文件名,这三部分我们合称为文件头 阅读全文
posted @ 2010-08-03 19:58 maxweii 阅读(1429) 评论(0) 推荐(0) 编辑
摘要: TCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号 阅读全文
posted @ 2010-08-03 19:57 maxweii 阅读(1379) 评论(2) 推荐(0) 编辑
摘要: 这一节讲述UDP编程的知识。UDP(User Datagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接协议。对于UDP我们不再进行过多介绍,如果你对UDP不是很了解,而且不知道它有什么用,那么我们这里就举个简单的例子:我们现在几乎每个人都使用的腾讯QQ,其聊天时就是使用UDP协议进行消息发送的。就像QQ那样,当有很多用户,发送的大部分都是短消息,要求能及时响应,并且对安全性要求不是很高的情况下使用UDP协议。 在Qt中提供了QUdpSocket 类来进行UDP数据报(datagrams)的发送和接收。这里我们还要了解一个名词Socket,也就是常说的“套 阅读全文
posted @ 2010-08-03 19:56 maxweii 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 本文章原创于 www.yafeilinux.com 转载请注明出处。前面讲述了一个最简单的FTP客户端程序的编写,这一节我们将这个程序进行扩展,使其可以浏览并能下载服务器上的所有文件。1.更改widget.ui文件如下。我们删除了Text Browser ,加入了几个Label ,Line Edit ,Push Button部件,一个Tree Widget及一个Progress Bar部件。然后我们对其中几个部件做如下更改。(1)将“FTP服务器”标签后的Line Edit的objectName属性改为“ftpServerLineEdit”,其text 属性改为“ftp.qt.nokia.co 阅读全文
posted @ 2010-08-03 19:54 maxweii 阅读(778) 评论(0) 推荐(1) 编辑
摘要: 本文章原创于 www.yafeilinux.com 转载请注明出处。前面讲完了HTTP和FTP,下面本来该讲解UDP和TCP了。不过,在讲解它们之前,我们先在这一节里讲解一个以后要经常用到的名词,那就是IP地址。对于IP地址,其实,会上网的人都应该听说过它。如果你实在很不了解它,那么我们简单的说:IP即Internet Protocol (网络之间互联的协议),协议就是规则,地球人都用一样的规则,所以我们可以访问全球任何的网站;而IP地址就是你联网时分配给你机子的一个地址。如果把网络比喻成地图,那IP地址就像地图上的经纬度一样,它确定了你的主机在网络中的位置。其实知道我们以后要用IP地址来代表 阅读全文
posted @ 2010-08-03 19:54 maxweii 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 上一节我们讲述了HTTP的编程,这一节讲述与其及其相似的FTP的编程。FTP即File Transfer Protocol,也就是文件传输协议。FTP的主要作用,就是让用户连接上一个远程计算机,查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或者把本地计算机的文件送到远程计算机上。 在Qt中,我们可以使用上一节讲述的QNetworkAccessManager和QNetworkReply类来进行FTP 程序的编写,因为它们用起来很简单。但是,对于较复杂的FTP操作,Qt还提供了QFtp类,利用这个类,我们很容易写出一个FTP客户端程序。下面我们先在帮助中查看这个类。在QFtp 阅读全文
posted @ 2010-08-03 19:52 maxweii 阅读(1078) 评论(1) 推荐(0) 编辑
摘要: HTTP即超文本传输协议,它是一种文件传输协议。这一节中我们将讲解如何利用HTTP从网站上下载文件。 上一节中我们已经提到过了,现在Qt中使用QNetworkAccessManager类和QNetworkReply类来进行HTTP的编程。下面我们先看一个简单的例子,然后再进行扩展。(一)最简单的实现。1.我们新建Qt4 Gui QApplication 。工程名为“http”,然后选中QtNetwork模块,最后Base class选择QWidget 。注意:如果新建工程时没有添加QtNetwork模块,那么就要手动在工程文件.pro中添加代码 QT += network ,表明我们使用了网络 阅读全文
posted @ 2010-08-03 19:51 maxweii 阅读(1928) 评论(0) 推荐(0) 编辑