tag 标签: 武汉华嵌嵌入式培训

相关博文
  • 热度 6
    2012-8-7 14:49
    1055 次阅读|
    0 个评论
    相关函数原型: 1. Malloc 作 用: Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数 用 法: Malloc 返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。 2.calloc 作 用:calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 例 子: 3.realloc 作 用:重新分配内存空间。 例 子: 4.总结: malloc: 动态分配size字节空间,返回它的指针。(此函数不能初始化内存空间)         calloc:动态分配n个连续的size字节空间,返回第一个指针。它有两个参数,分别为参数的数目,和每个参数的大小,那么这两个参数的乘积就是这个分配空间的大小。(此函数可以初始化内存空间)         realloc:将指针指向的内存空间扩展成n个,把它放在最后解释因为偶不建议使用,确实要用也要考虑多种情况。         free:释放上述两函数分配的空间; malloc与new : 1 、new 建立的是一个对象,malloc 分配的是一块内存。         2、malloc申请的是heap区的内存空间,返回的是指针。new 建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间。(注意用delete释放空间)。         3、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。         4、使用free之前要判断,使其free的指针是!NULL的,使用delete则无须判断。         5、free掉的内存是该指针指向的一段内存空间,里面应该是空的。而delete掉的内存是里面确实存有数据或者对象的。 最后要注意的是malloc和free 、new和delete成对使用,以免不必要的麻烦。 更多详情请访问 http://www.embedhq.org/html/jsbw/2010/0119/308.html
  • 热度 2
    2012-8-7 12:06
    1180 次阅读|
    0 个评论
    本文主要介绍了怎么使用QTextEdit控件实现类似QQ聊天对话框的效果,包括令对话框显示不同的字体、颜色,实现QQ震动效果和QQ表情效果(即在QTextEdit中显示图片)。Demo运行的界面如下图所示:   点击相关按钮可以改变输入文本框的字体,改变输入文本框的颜色,实现QQ震动效果,以及在文本框中添加自定义图片。下面将通过demo讲解实现原理。 #include QtGui #include "qt1.h" Qt1::Qt1(QWidget *parent):QDialog(parent) {     setupUi(this);     tbfont-setIcon(QIcon("./images/bold.png"));     tbcolor-setIcon(QIcon("./images/color.png"));     tbtru-setIcon(QIcon("./images/italic.png"));     tbbq-setIcon(QIcon("./images/biaoqing.png"));     tbsend-setIcon(QIcon("./images/underline.png"));       connect(tbfont,SIGNAL(clicked()),this,SLOT(fontfun()));//字体类型     connect(tbcolor,SIGNAL(clicked()),this,SLOT(colorfun()));//字体颜色     connect(tbtru,SIGNAL(clicked()),this,SLOT(trumfun()));//震动     connect(tbbq,SIGNAL(clicked()),this,SLOT(insertImage()));//插入图片     connect(tbsend,SIGNAL(clicked()),this,SLOT(sendfun()));//发送消息 }   void Qt1::fontfun()//设置字体类型 {     bool ok;     QFont font = QFontDialog::getFont(                  ok, QFont("Helvetica ", 10), this);     if (ok)     {             te2-setFont(font);         f = font;     } }       void Qt1::colorfun() //设置字体颜色 {     QColor color = QColorDialog::getColor ( Qt::red, this );     te2-setTextColor(color);     c = color; }   void Qt1::trumfun() //震动效果实现 {     QPoint p = getPos(this);//获取当前窗口坐标     int x = p.x();     int y = p.y();     int i = 0;       for(i=0;i10;i++)//改变窗口位置实现震动效果     {         this-move(x+5,y+5);         usleep(300);         this-move(x,y);         usleep(300);         this-move(x-5,y-5);         usleep(300);         this-move(x,y);     }         this-move(x-1,y-28); }   void Qt1::sendfun() {     QFont ff (QFont( "AR PL UKai CN,10,-1,5,50,0,0,0,0,0" )) ;     QColor cc (0,0,0);     setInsertTextColor(cc);//设置系统时间字体颜色     setInsertTextFont(ff);//设置系统时间字体类型     te1-append(showTime());     setInsertTextColor(c);//设置插入字体颜色     setInsertTextFont(f);//设置插入字体字体类型     te1-append(te2-toPlainText());     te2-clear(); }   void Qt1::setInsertTextColor(const QColor col)//把col颜色作为字体颜色 {     QTextCharFormat fmt;//文本字符格式     fmt.setForeground(col);// 前景色(即字体色)设为col色     QTextCursor cursor = te1-textCursor();//获取文本光标     cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示     te1-mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式 }   void Qt1::setInsertTextFont(const QFont col)//把col颜色作为字体颜色 {     QTextCharFormat fmt;//文本字符格式     fmt.setFont(col);//字体     QTextCursor cursor = te1-textCursor();//获取文本光标     cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示     te1-mergeCurrentCharFormat(fmt);//textEdit使用当前的字符格式 }   void Qt1::insertImage() //文本编辑框中插入图片 {     QString file = QFileDialog::getOpenFileName(this, tr("Open File"),"pic/",\                                             tr("Images (*.png *.jpg)"));     QUrl Uri ( QString ( "file://%1" ).arg ( file ) );     QImage image = QImageReader ( file ).read();       QTextDocument * textDocument = te2-document();     textDocument-addResource( QTextDocument::ImageResource, Uri, QVariant ( image ) );     QTextCursor cursor = te2-textCursor();     QTextImageFormat imageFormat;     imageFormat.setWidth( image.width() );     imageFormat.setHeight( image.height() );     imageFormat.setName( Uri.toString() );     cursor.insertImage(imageFormat);  }   QPoint Qt1::getPos(QWidget* widget)//获取窗体位置坐标 {      if (NULL == widget)      {         return QPoint(-1,-1);      }            float px = 0;      float py = 0;      QWidget *parent = widget;      QWidget *preParent= NULL;      do      {           QPoint p = parent-pos();           px += p.x();           py += p.y();           preParent = parent ;           parent = parent-parentWidget();      } while (NULL != parent);            QSize size = preParent-frameSize();      QSize size2 = preParent-size();      px = px + (size.width() - size2.width())/2;      py = py + (size.height() - size2.height() - (size.width() - size2.width())/2);      QPoint pr(px, py);            return pr; }   QString Qt1::showTime()//获取系统时间 {     QTime time=QTime::currentTime();     QString text = time.toString("hh:mm:ss");       return text; }   更多详情请访问 http://www.embedhq.org/index.html
  • 热度 5
    2012-8-7 11:59
    839 次阅读|
    0 个评论
    引言:在很多项目开发过程以及诸多名企入职笔试题里面都有对结构体求sizeof的问题,武汉华嵌结合教学和研发实践,总结了一下几点,希望可以为大家提供有效参考。   sizeof有三种语法形式,如下: ⅰ、sizeof(object_name);    //sizeof(对象); ⅱ、sizeof(type_name);  //sizeof(类型); ⅲ、sizeof object_name; //sizeof 对象;   注意:sizeof是一个运算符,在C语言中是一个关键字,并不是函数,要和strlen区分开来。sizeof是求取所占的存储空间的所有字节数。 sizeof与结构体的使用,先来看下面的例子: typedef struct {     int a;     char b; }A_t; typedef struct {     int a;     char b;     char c; }B_t; typedef struct {     char a;     int b;     char c; }C_t; int main(int argc, char *argv[]) {     char *a=0;     printf(“%d\n”, sizeof(a));     //输出结果:4     printf(“%d\n”, sizeof(*a));    //输出结果:1     printf(“%d\n”, sizeof(A_t));   //输出结果:8     printf(“%d\n”, sizeof(B_t));   //输出结果:8     printf(“%d\n”, sizeof(C_t));   //输出结果:12     return 0; }   为什么会有如上的结果呢?这和字节对齐有关,当然还和硬件平台有关,也和编译器有关。就一般情况而言,主要有以下三个原则: 1) 结构体变量的首地址能够被其 最宽 基本类型成员的大小所整除; 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,     如有需要编译器会在成员之间加上填充字节(internal adding); 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最    末一个成员之后加上填充字节(trailing padding)。 在字节对齐的时候有的时候是需要字节填充的,那这是为什么呢?大家不防想一想,在C语言中基本的数据类型都有一定的存储大小,那么来看一下下面的这个例子: struct stu{     char a;     int b; }; 假设int类型占有4个字节的大小,则sizeof(struct stu)的大小就为8,根据上面的三条分析和基本类型的存储宽度可知,在成员a的后面会补上三个字节,然后才存放成员b,即总共占了8个字节。 sizeof和含有位域的结构体的使用: 位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来。 C99规定int、unsigned   int和bool可以作为位域类型,但编译器几乎都对此作了扩展, 允许其它类型类型的存在。 使用位域的主要目的是压缩存储,其大致规则为: 1)   如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字 段将紧邻前一个字段存储,直到不能容纳为止; 2)   如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字 段将从新的存储单元开始,其偏移量为其类型大小的整数倍; 3)   如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式; 4)   如果位域字段之间穿插着非位域字段,则不进行压缩; 5)   整个结构体的总大小为最宽基本类型成员大小的整数倍。  让我们来看如下的例子: struct stu{     char   a:3;     char   b:4;     char   c:5; }; 则sizeof(struct stu)的大小在gcc上面得到的结果为2,在visual c上得到的结果也为2。根据以上五条,还有前面讲的对齐,可以得出结果为2个字节。我们再来看下如下的例子: struct stu{     char   a:3;     int    b:4;     char   c:5; }; 则sizeof(struct stu)的大小在gcc上面得到的结果为4,在visual c上得到的结果为12。根据以上五条,还有前面讲的对齐,可以推出这样的结果,请着重看下第三条,就可以知道visual c和gcc分别得到不同结果的原因了。   (本文为武汉华嵌嵌入式培训所创,转载请注明来源 http://www.embedhq.org )