Monthly Archive: 一月 2014

28

Qt GUI开发学习笔记

TM截图20140128131947

最早的时候喜欢用VB6写界面,因为非常方便,上手特别快。不过这也容易造就很多问题,而且时至今日,VB6已经太老了,项目开发也很少用VB甚至很少用BASIC语言,C/C++/Java成了主流。学C/C++的时候基本都是在控制台下做实验,没怎么涉及图形界面,不过真的到要用GUI的时候又发现自己什么都不会。后来,了解了Qt这个东西,它支持纯粹的C++语言(不像.NET的C++编程方式,有很多是自定义的特性),跨平台,构建界面也很方便,而且Qt是在持续更新的,不会很快就过时,于是决定要研究一下Qt。在这里贴出学习过程中的一些笔记,方便以后自己查阅,也给同样学习Qt的同学一些参考。

 

开发环境与工程结构

安装VisualStudio-Add-In后可以用VC结合Qt Designer进行开发,在VC里写代码,Qt Designer上画界面。

不过VC新建工程后要更改项目配置,在文件查找路径里添加上Qt的头文件、库文件等的所在路径,不然编译时会提示找不到文件。

对于每个窗体,Qt Designer会生成ui_frmName.h文件,其中包括class Ui_frmName的声明,用来描述用户在此窗口上设置的属性和添加的控件等信息。并且会在namespace UI里声明class frmName: public Ui_frmName {};

每个窗口类class frmNameClass都继承自QMainWindow或QDialog,并声明私有成员Ui::frmName ui_frmName用来控制显示窗口及控件(Ui::frmName即来自上面提到的Qt Designer生成的ui_frmName.h文件,一般地,用户不需要更改

[……]阅读全文

16

[调试笔记]x86页式内存管理(NOPAE)

这两天看了下x86内存分页机制,调试之后大概弄懂了,发出来做个笔记。

0.测试代码

ULONG TestVar = 123456;   // Global Variable
KdPrint(("VirtualAddress: %X\nPhysicalAddress: %X", &TestVar, PhyAddress));   // in DriverEntry

WINDBG输出如下

00000003    35.10139084    VirtualAddress: F889B000    
00000004    35.10139084    PhysicalAddress: 338A000

 

1.物理内存定位
DirBase=CR3,保存着当前进程的页目录表基址

lkd> dd F889B000
f889b000  0001e240 f8891597 0776ea68 00000000
f889b010  00000000 00000000 00000000 00000000
f889b020  00000000 00000000 00000000 00000000
f889b030  00000000 00000000 00000000 00000000
f889b040 

[……]阅读全文