- 博客(240)
- 资源 (4)
- 收藏
- 关注
转载 A*寻路初探
A*(念作A星)算法,它只是描述算法的原理,使你可以在进一步的阅读中理解其他相关的资料。序:搜索区域假设有人想从A点移动到一墙之隔的B点,如下图,绿色的是起点A,红色是终点B,蓝色方块是中间的墙。[图1]你首先注意到,搜索区域被我们划分成了方形网格。像这样,简化搜索区域,是寻路的第一步。这一方法把搜索区域简化成了一个二维数组。数组的每一个元素是网格的一个方块,方块被标记为可通过
2010-10-24 19:54:00 2222
原创 最小化到托盘并有图标闪烁效果
利用QSystemTrayIcon类来实现最小化托盘,并实现像QQ那样有消息闪烁图标的效果但是程序运行到最后有个让我找了很久都没有找到的问题,就是当点击了图标的MessageBox()后,程序就自动退了了,并且exit with code 0代码贴出来分享,也希望这个问题能在大家的帮助下找到原因widget.hclass Dialog : public QDialog { Q_OBJECTpublic: Dialog(QWidget *parent = 0); ~Dialog();
2010-10-22 16:21:00 6296 3
原创 QT 托盘类QSystemTrayIcon
<br />QSystemTrayIcon为应用程序在系统托盘中提供一个图标<br />关于系统托盘的介绍就节省了,但是并不是所有的系统都支持系统托盘,来检查一个系统是<br />否支持系统托盘,使用静态函数QSystemTrayIcon::isSystemTrayAvailable()来检测<br />来添加一个系统托盘入口,创建一个QSystemTrayIcon对象,调用 setContexMenu()来为这个<br />图标创建一个右键菜单,就像QQ上退出的那样的菜单。然后调用show()方法来使它在
2010-10-21 13:18:00 9263
原创 设置 按钮保持状态
<br />我们看到很多软件,当鼠标停靠悬浮在一个按钮上面时候,按钮的样式就会改变,改变图片或者字体,或者形状<br />当按钮被按下时候,它的状态仍旧还会改变,这种效果可以用下面的方法来实现<br /> <br />Qt的Button的基类有一个函数setCheckable(bool)可以让按钮有一个选中的状态,还有一个setAutoExclusive(bool)可以跟radiobutton一样可以跟其他radiobutton保持只有一个选中的按钮。因此可以用这两个函数实现360的按钮。 在一个部件中所有
2010-10-19 18:10:00 7005
转载 大数相乘
我这里采取的方法是将大数保存在字符串中,然后将两个字符串逐位相乘,再进位和移位。应该还有效率更高的代码。 源代码:#include #include #include #define N 100 /* *将在数组中保存的字符串转成数字存到int数组中 */ void getdigits(int *a,char *s) { int i; char digit; int len = strlen(s); //对数组初始化 fo
2010-10-19 09:23:00 1437
原创 来认识寄存器,内存,IO空间,IO端口,IO内存
<br />整天说内存,寄存器,端口,他们有什么联系,有什么不同之处,你了解他们么?<br /> <br />第一、寄存器和内存的区别<br />寄存器和内存都是可以用来读写的,但寄存器的操作时有副作用,称之为(side effect 边际效果)<br />读取一个寄存器可能导致寄存器中的内容发生变化,比如在一些设备的中断状态寄存器中,读取了寄存器后会自动清零<br /> <br />第二、IO空间和内存空间<br />并不是所有的体系结构都有IO空间这个定义的,我所了解的只有X86体系上有,而ARM体系结
2010-10-17 00:39:00 8070
转载 图形视图框架(The QGraphics View Framework)
<br />图形视图提供了一个外表(surface)来实现大量的客户所做的2D图形项的管理和相互的结合;一个视图窗口部件来使这些项可视化,并支持缩放和旋转。<br />该框架包括一个事件传播体系,可以使得场景中的项的交叉可以达到双精度的精确控制。其中的项可以处理事件、鼠标按压、移动、释放和双击事件,它们也可以追踪鼠标的移动。<br />图形视图使用一个BSP(二进制空间分区Binary Space Partitioning)树来提供快速的项发现,正因为如此,它可以使巨大的场景实时地可视化,即便它有上百万个项
2010-10-12 22:54:00 3369
转载 修改const常量的方法
<br />看到这个标题,你也许会说,我不懂const, 因为Const修饰的是不可变得变量,他的值是不能修改的。没错,const修改的值的确不能修改,但是也有条件,条件就是编译不能通过,const是一个编译时期常量。如果我能在绕过编译器,通过编译后,我仍然可以修改const的值。<br /> 分C/C++两种情况讨论:<br /> 一 C语言:<br /> const long lng=10;<br /> long *pl=(long)&lng;<br /> *pl=10
2010-10-12 22:45:00 3028 2
转载 QT下的几种透明效果
1.窗口整体透明,但是窗体上的控件不透明。 通过设置窗体的背景色来实现,将背景色设置为全透。QPalette pal = palette(); <br />pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); <br />setPalette(pal); 试验效果: 窗体标题栏不透明; 窗体客户区上的控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。 另外从网上看到的方法:set
2010-10-10 00:38:00 2615
转载 QT事件过滤器
<br />Qt事件模型一个真正强大的特色是一个QObject 的实例能够管理另一个QObject 实例的事件。 <br /><br />让我们试着设想已经有了一个CustomerInfoDialog的小部件。CustomerInfoDialog 包含一系列QLineEdit. 现在,我们想用空格键来代替Tab,使焦点在这些QLineEdit间切换。 <br /><br />一个解决的方法是子类化QLineEdit,重新实现keyPressEvent(),并在keyPressEvent()里调用focusN
2010-10-09 23:28:00 6464 1
原创 串口线和串口通信介绍
<br />目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。<br />1.DB9和DB25的常用信号脚说明<br /> 9针串口(DB9) 25针串口(DB25)<br />针号 功能说明 缩写 针号 功能说明 缩写<br />1 数据
2010-10-08 17:20:00 3754
原创 setStyleSheet来设定窗口部件的样式
<br />使用setStyleSheet来设置图形界面的外观:<br />QT Style Sheets是一个很有利的工具,允许定制窗口的外观,<br />此外还可以用子类QStyle来完成,他的语法很大比重来源于html的CSS,但是适用于窗口<br /> <br />概括:<br />Style Sheets是文字性的设定,对于整个应用程序可以使用QApplication::setStyleSheet() 或者对应一个窗口可以使用QWidget::setStyleSheet(),如果好几个样式表在不同
2010-10-07 20:30:00 19848 3
转载 QT Phonon详解
<br />前言 <br />Phonon嚴格來說其實非為Qt的library,Phonon原本就是KDE 4的開放原始碼多媒體API,後來與Qt合併與開發,所以簡單來說就是Qt使用Phonon這個多媒體框架來提供一般影音多媒體檔案的播放,而這些影音多媒體來源可以是檔案、網路串流或是指到一個檔案的QUrl。<br />Phonon是一個跨平台多媒體框架,能夠在Qt應用程式中使用與播放影音多媒體內容。<br /> <br />[編輯]Phonon的架構 <br />整體來說,Phonon的架構只需要記住以下的
2010-10-02 01:06:00 4762
转载 QT让一个图片随窗体缩放
<br />下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下面的代码中可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。<br />头文件: ImageWidget.hpp<br />Quote:<br />#ifndef IMAGEWIDGET_HPP<br />#define IMAGEWIDGET_HPP<br />#include <QtCore><br />#include <QtGui><br />clas
2010-09-24 01:09:00 5042 5
转载 QT中不规则窗体和部件的实现
<br />Qt中不规则窗体和部件的实现,不管是窗体还是部件,都是从QWidget派生而来的,所以它们的原理是一样的,都是设置部件的背景色或者按钮图标等为一个图像A,然后设置此部件的掩码为另一个图像B,这个图像B经过位与运算后,得到不规则的图像,这就行了下面,是一个简单的示例:<br />form.h:引用 <br />#ifndef FORM_H<br />#define FORM_H<br /><br />#include <QtGui/QWidget><br /><br />class Form
2010-09-24 01:04:00 2669
原创 移植到ARM的qt4.6.3显示中文的问题
移植了QT4.6.3的ARM无法正常的现实中文如果是在X86平台上时候,使用QTextCodec::setCodecForTr(QTextCodec::codecForLocale());来设置显示中文但是在ARM平台上却不行,我们需要移植一些中文字体库,这里使用的是QT自带的中文字体库,wenquanyi_120_50.qpf 放在QT的安装目录下 /usr/local/Trolltech/lib/fonts下面在/etc/profile中导出路径export QT_QWS_FONTDIR=/usr/lo
2010-09-23 17:18:00 5357 1
原创 ps输出进程状态
<br />PROCESS STATE CODES<br />Here are the different values that the s, stat and state output specifiers<br />(header "STAT" or "S") will display to describe the state of a process.<br />D Uninterruptible sleep (usually IO)<br />R Running or runnabl
2010-09-23 14:17:00 1698
转载 gluPerspective函数
<br />gluPerspective <br /> NAME(函数名称) <br /> gluPerspective -- set up a perspective projection matrix (设置透视投影矩阵) <br /> C SPECIFICATION(C语言实现示例) <br /> void gluPerspective( <br /> GLdouble fovy, //角度 <br /> GLdouble aspect,//视景体的宽高比 <br /> GLdouble
2010-09-13 00:08:00 3949
原创 glTexCoord2f的用法
<br />在OpenGL中,负责二维纹理载入的函数是glTexCoord2f()。其声明为:<br /> <br />glTexCoord2f(GLfloat s, GLfloat t)函数原型<br />有两个参数:GLfloat s, GLfloat t<br />第一个参数代表X坐标。 0.0f 是纹理的左侧。 0.5f 是纹理的中点, 1.0f 是纹理的右侧。<br />第二个参数代表Y坐标。 0.0f 是纹理的底部。 0.5f 是纹理的中点, 1.0f 是纹理的顶部。<br />一个完全纹理的四
2010-09-11 02:19:00 11504
原创 QGLWidget类
<br />QGLWidget类用来绘制OpenGL图形的窗口<br />QGLWidget提供一系列的函数来在一个QT应用程序里面绘制OpenGL,用起来很简单,我们可以派生它,然后<br />使用像其他任何窗口一样使用子类,除非你选择了使用QPainter和标准的OpenGL绘图命令<br />QGLWidget提供三个方便的虚函数,我们可以在子类中重写他们,来完成一些典型的OpenGL任务:<br />1、paintGL()函数:绘制OpenGL图像,当窗口需要被刷新时候被调用<br />2、resi
2010-09-07 02:26:00 19593 4
原创 QMimeData类
<br />QMimeData类提为数据提供一个容器,用来记录关于MIME类型数据的信息<br />QMimeData常用来描述保存在剪切板里信息,或者拖拽原理<br />QMimeData对象把它所保存的信息和正确的MIME类型连接起来来保证信息可以被安全的在应用程序之间转移<br />,或者在同一个应用程序之间拷贝<br />QMimeData对象通产雇佣new来创建,并且支持QDrag和QClipboard对象,这可以使QT管理他们所使用的内存<br />单一的QMimeData对象可以同时用好几种不
2010-09-04 22:02:00 10030
原创 实现atoi,itoa,strcmp,strcpy,strcat,strlen函数
#includeusing namespace std;void myitoa(const int num,char *ch);int myatoi(const char *ch);void mystrcpy(char* dest,const char* source);int mystrcmp(char *source1,char*source2);void mystrcat(char *dest,char *source);int mystrlen(char *ch);void main(){ int
2010-09-03 00:43:00 1613
转载 QT容器类
<br />Sequentail Containers<br />QVector<T> array-like data structure(在尾部插入数据时效率很高,而在中间和头部插入数据时开销很大)。<br />QVector提供了[]运算符<br />QVector可以用<<运算符代替append()函数。<br />QVector中的基本类型及指针被初始化为0。<br />QLinkedList<T><br />QLinkedList不提供[]运算符,所以必须通过迭代器来对其进行遍历。<br />QL
2010-09-02 13:14:00 2689
原创 QButtonGroup 类
<br />QButtonGroup提供一个容器,用来组织一组按钮<br /><br />QButtonGroup提供一个可以摆放按钮的容器,他并不提供一个可视化的容器,但是可以成组的来管理每个按钮的状态<br />一个独占的按钮管理组来管理所有的按钮当一个按钮被按下,默认的,一个按钮组是独占的,按钮组里面的按钮经常是checkable <br /> <br />QPushButton's, QCheckBoxes ,或者QRadioButtons,如果创建了一个独占的按钮组,应该保证组里至少一个按钮初始化
2010-08-31 19:55:00 4477
转载 QButtonGroup的简单应用
<br />QButtonGroup的简单应用<br />所有代码都是在qt3.3.8+fedora8下运行的。<br />QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。<br />按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。<br />头文件: <qbuttongroup.h><br />主要属性和函数:<br />int id:<br />按钮的标
2010-08-31 01:44:00 6669
原创 mini2440移植QT4.6.3过程
一般而言,Qt应用程序的内容可分为Qt库的编译,Qt库的移植和基于Qt的应用程序的移植。Qt库的编译所花费的耗线性时间代价是最长的,而Qt库的移植是比较简单的一个工作,只需要让串口发送数据到开发板上即可,笔者本人使用的是虚拟机提供的一个共享工具 wmwate-tools,在拷贝某些库的时候会出现不可以预知的错误,重试也无法解决这个问题,解决办法在于把库目录打包共享,这样的出错几率会比较低。最后,应用程序的移植,这部分所花费的非线性时间应该是最长的,在移植调试的过程中将会出现很多很多未能预知的问题,详细的解答
2010-08-30 18:53:00 3800 5
转载 使用Qt作窗口截屏(含源码)
<br />截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件。介绍的好像有点多余:(,那我们就直接切入正题。<br />QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上的窗体存成一个QPixmap格式的图片,很容易再将QPixmap存成文件。函数使用很简单,两行代码就可以。<br />QPixmap pixmap = QPixmap::grabWidget(this);//this是调用该函数的QWidget *指针<br />pixmap.save(“
2010-08-29 22:54:00 13666
转载 Qt-4.6动画Animation快速入门三字决
<br />Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序。不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞。<br /> 前面写过一篇文章Qt动画效果的幕后英雄:QTimeLine,介绍了怎么利用QTimeLine写一动画程序。今天又再重申前文里的一句话,所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情。当然做这件事情,最好用的就是状态机,没错Qt-
2010-08-27 15:45:00 6269
原创 QDrag 类
<br />QDrag类为MIME-based拖拽数据转换提供支持<br />在一个应用程序中,数据拖拽对用户来说失意而归直观的方法,在很多桌面环境中都作为一个应用程序之间拷贝数据的结构,在QT中拖拽主要主要围绕着QDrag类<br />通过拖拽来交换的数据包含在一个QMimeData对象中,这个对象通过setMimeData()来<br />制定,用下面的方法<br /> QDrag *drag = new QDrag(this);<br /> QMimeData *mimeData = ne
2010-08-26 14:36:00 4120
转载 鼠标拖放技术二
接着上次的说,上次说到了拖放技术,今天依然是一个例子,同样是来自《C++ GUI Programming with Qt 4, 2nd Edition》的。这次的 demo 还算是比较实用:实现的是两个 list 之间的数据互拖。在很多项目中,这一需求还是比较常见的吧!下面也就算是抛砖引玉了啊!projectlistwidget.h#ifndef PROJECTLISTWIDGET_H #define PROJECTLISTWIDGET_H #include <QtGui> class Proje
2010-08-26 00:44:00 3992 1
转载 拖放技术一
拖放 Drag and Drop,有时又被称为 DnD,是现代软件开发中必不可少的一项技术。它提供了一种能够在应用程序内部甚至是应用程序之间进行信息交换的机制,并且,操作系统与应用程序之间进行剪贴板的内容交换,也可以被认为是 DnD 的一部分。DnD 其实是由两部分组成的:Drag 和 Drop。Drag 是将被拖放对象“拖动”,Drop 是将被拖放对象“放下”,前者一般是一个按下鼠标的过程,而后者则是一个松开鼠标的过程,这两者之间鼠标一直是被按下的。当然,这只是一种通常的情况,其他情况还是要看应用程序的具
2010-08-25 23:26:00 5423
原创 QByteArray和QVariant
<br />前面我们在介绍QString的最后部分曾经提到了QByteArray这个类。现在我们就首先对这个类进行介绍。<br />QByteArray具有类似与QString的API。它也有相应的函数,比如left(), right(), mid()等。这些函数不仅名字和QString一样,而且也具有几乎相同的功能。QByteArray可以存储原生的二进制数据和8位编码的文本数据。这句话怎么理解呢?我们知道,计算机内部所有的数据都是以0和1的形式存储的。这种形式就是二进制。比如一串0、1代码:1000,计
2010-08-25 16:39:00 2446
原创 QSortFilterProxyModel
<br />QSortFilterProxyModel类提供在其他的model和view之间排序和过滤数据的支持<br />QSortFilterProxyModel可以用来对item进行排序,筛选,它把一个model的source结构通过model的index结构map到他新提供的index里面,这种方法允许一个model重新组织,当和他相关联的view,不需要在数据上请求任何转换,也不需要复制内存中的数据<br />代码如下<br />QTreeView *treeView = new QTreeVie
2010-08-25 16:20:00 10950 6
转载 QString
<br />今天要说的是QString。之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的。<br />每一个GUI程序都需要string,这些string可以用在界面上的提示语,也可以用作一般的数据结构。C++语言提供了两种字符串的实现:C风格的字符串,以'/0‘结尾;std::string,即标准模版库中的类。Qt则提供了自己的字符串实现:QString。QString以1
2010-08-25 16:10:00 2708
转载 QT容器中的通用算法
今天开始的部分是关于Qt提供的一些通用算法。这部分内容来自C++ GUI Programming with Qt 4, 2nd Edition。 提供了一系列通用的模板函数,用于实现容器上面的基本算法。这部分算法很多依赖于STL风格的遍历器(还记得前面曾经说过的Java风格的遍历器和STL风格的遍历器吗?)。实际上,C++ STL也提供了很多通用算法,包含在头文件内。这部分算法对于Qt容器同样也是适用的。因此,如果你想使用的算法在Qt的头文件中没有包含,那么就可以使用STL的算法代替,这并不会产生什么冲突。
2010-08-25 14:52:00 2389 1
原创 使用代理model QSortFilterProxyModel进行item筛选和排序
Qt为我们预定义了很多model,前面已经说过了QStringListModel、QDirModel(也算是Qt推荐使用的QFileSystemModel吧,这个在上一章最后重新加上了一段话,没有注意的朋友去看看哦)。今天我们要说的这个QSortFilterProxyModel并不能单独使用,看它的名字就会知道,它只是一个“代理”,真正的数据需要另外的一个model提供,并且它是用来排序和过滤的。所谓过滤,也就是说按照你输入的内容进行数据的筛选,很像Excel里面的过滤器。不过Qt提供的过滤功能是基于正则表
2010-08-24 14:53:00 5247
转载 model-view模型之QDirModel
今天我们来看一个很有用的model:QDirModel。这个model允许我们在view中显示操作系统的目录结构。这次让我们先来看看运行结果:这个界面很熟悉吧?不过这可不是由QFileDialog打开的哦,这是我们自己实现的。而提供这种实现支持的,就是QDirModel和QTreeView。我们来看一下代码。 mytreeview.h#ifndef MYLISTVIEW_H #define MYLISTVIEW_H #include class MyTreeView : public QWidget {
2010-08-23 00:58:00 2745
原创 model-view模型之QListView和QStringListModel
以QListView为例子,QListView是不显示表头和表框的,如果要显示,可以使用QTreeView来代替view的显示属性分为列表list显示和icon图标显示,使用QListView::setViewMode()来设置,默认为list型的 QListView::setModel ()用来设置view所关联的model 获取view中当前的位置,QListVie
2010-08-22 22:32:00 5895 1
原创 QT中关于头文件一个很奇怪的问题
<br />最近在用QT Creator时候遇上一个很奇怪的问题,以往添加头文件使用#include<QStringListModel>这样的格式就可以,但是现在有时候却编译通不过,报了一大堆的错误,如下图<br /><br /> <br />但是如果修改成#include<qstringlistmodel.h>这样的格式,就可以编译通过,<br />如下图<br /><br /> <br />前后程序并没有修改,但是改了头文件就不行了<br />昨天用include<QVector>时候一样,但是第一次编
2010-08-22 16:00:00 4281 7
原创 QTreeWidget的用法
<br />QTreeWidgetItem有九个重载的函数,如果在构造的时候指定了parent,就不需要在后面用insertTopLevelItems来插入到里面,如果没有指定parent,就把所有的根节点放到QList中,然后使<br />用insertTopLevelItems(int,QList)插入到QTreeWidget里面<br />QTreeWidgetItem::addChild(QTreeWidgetItem*)用于根节点添加子节点<br />QTreeWidget::setColumnC
2010-08-22 12:40:00 13064
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人