Qt入门-QByteArray类

分类: [软件]Qt+VS2008 2012-07-22 16:18 963人阅读 评论(0) 收藏 举报

Qt GUI API中使用Unicode类型的字符串类QString。使用Unicode的好处是可以支持更多的地区语言,ASCII是Uncode的子集。

QByteArray和QString的方法和属性相似,可以参考QString。另外有一些与QByteArray相关的非成员函数:

  1. //Related Non-Members  
  2.   
  3. //计算CRC16校验和  
  4. quint16 qChecksum ( const char * data, uint len )  
  5. //压缩data,并返回新的值,参数compressionLevel的值是0~9  
  6. QByteArray  qCompress ( const QByteArray & data, int compressionLevel = -1 )  
  7. QByteArray  qCompress ( const uchar * data, int nbytes, int compressionLevel = -1 )  
  8. //解压缩  
  9. QByteArray  qUncompress ( const QByteArray & data )  
  10. QByteArray  qUncompress ( const uchar * data, int nbytes )  
  11. //格式化字符串  
  12. int qsnprintf ( char * str, size_t n, const char * fmt, ... )  
  13. int qvsnprintf ( char * str, size_t n, const char * fmt, va_list ap )  
  14. //比较字符串  
  15. int qstrcmp ( const char * str1, const char * str2 )  
  16. //复制字符串  
  17. char *  qstrcpy ( char * dst, const char * src )  
  18. char *  qstrncpy ( char * dst, const char * src, uint len )  
  19. //分配空间复制字符串返回  
  20. char *  qstrdup ( const char * src )  
  21. //忽略大小写的字符串比较  
  22. int qstricmp ( const char * str1, const char * str2 )  
  23. int qstrnicmp ( const char * str1, const char * str2, uint len )  
  24. //返回字符串的长度  
  25. uint    qstrlen ( const char * str )  
  26. uint    qstrnlen ( const char * str, uint maxlen )  
  27. //固定长度内的字符串比较  
  28. int qstrncmp ( const char * str1, const char * str2, uint len )  
  29. //相关QByteArray和const char *的运算符  
  30. bool    operator!= ( const QByteArray & a1, const QByteArray & a2 )  
  31. bool    operator!= ( const QByteArray & a1, const char * a2 )  
  32. bool    operator!= ( const char * a1, const QByteArray & a2 )  
  33. const QByteArray    operator+ ( const QByteArray & a1, const QByteArray & a2 )  
  34. const QByteArray    operator+ ( const QByteArray & a1, const char * a2 )  
  35. const QByteArray    operator+ ( const QByteArray & a1, char a2 )  
  36. const QByteArray    operator+ ( const char * a1, const QByteArray & a2 )  
  37. const QByteArray    operator+ ( char a1, const QByteArray & a2 )  
  38. bool    operator< ( const QByteArray & a1, const QByteArray & a2 )  
  39. bool    operator< ( const QByteArray & a1, const char * a2 )  
  40. bool    operator< ( const char * a1, const QByteArray & a2 )  
  41. QDataStream &   operator<< ( QDataStream & out, const QByteArray & ba )  
  42. bool    operator<= ( const QByteArray & a1, const QByteArray & a2 )  
  43. bool    operator<= ( const QByteArray & a1, const char * a2 )  
  44. bool    operator<= ( const char * a1, const QByteArray & a2 )  
  45. bool    operator== ( const QByteArray & a1, const QByteArray & a2 )  
  46. bool    operator== ( const QByteArray & a1, const char * a2 )  
  47. bool    operator== ( const char * a1, const QByteArray & a2 )  
  48. bool    operator> ( const QByteArray & a1, const QByteArray & a2 )  
  49. bool    operator> ( const QByteArray & a1, const char * a2 )  
  50. bool    operator> ( const char * a1, const QByteArray & a2 )  
  51. bool    operator>= ( const QByteArray & a1, const QByteArray & a2 )  
  52. bool    operator>= ( const QByteArray & a1, const char * a2 )  
  53. bool    operator>= ( const char * a1, const QByteArray & a2 )  
  54. QDataStream &   operator>> ( QDataStream & in, QByteArray & ba )  


QByteArray与QString之间的转换:

示例:

QByteArray cstr("abcd");
QString s = cstr; 


QByteArray cstr("abcd");
QString s;
s.prepend(cstr);


QString s("hello");
QByteArray cstr = s.toAscii();


QString s("hello");
QByteArray cstr = s.toLatin1();


QByteArray类同样不以'\0'为结尾:如

  1. QByteArray s;  
  2. s.resize(5);  
  3. s[0] = '1';  
  4. s[1] = '2';  
  5. s[2] = '3';  
  6. s[3] = '\0';  
  7. s[4] = 'a';  
  8.   
  9. cout << s << endl;  

屏幕打印的是:“123 a”
posted @ 2012-12-06 01:15 姚先进 阅读(2339) | 评论 (0)编辑 收藏
 
运行程序的时候加-fn SIMHEI 看看,这个是黑体
例如./hello -qws -fn SIMHEI &
这样字体就大了!
posted @ 2012-12-05 15:05 姚先进 阅读(233) | 评论 (0)编辑 收藏
 

嵌入式平台Qt程序开发步骤  


 

Step 1:

         首先设置宿主机上的环境变量(依你自己的情况而定):

    export QTDIR=/usr/local/arm-linux/qt_toolchain/qt-2.3.7

    export QPEDIR=/usr/local/arm-linux/qt_toolchain/qtopia-free-1.7.0

    export LD_LIBRARY_PATH=/usr/local/arm-linux/qt_toolchain/qt-2.3.7/lib:$LD_LIBRARY_PATH

    export LD_LIBRARY_PATH=/usr/local/arm-linux/qt_toolchain/qt-2.3.2/lib:$LD_LIBRARY_PATH

    export TMAKEDIR=/usr/local/arm-linux/qt_toolchain/tmake-1.11

    export TMAKEPATH=/usr/local/arm-linux/qt_toolchain/tmake-1.11/lib/qws/linux-arm-g++

    export PATH=/usr/local/arm-linux/qt_toolchain/tmake-1.11/bin:$PATH

Step 2:

          利用designer来设计界面,生成okform.ui;(注意:如果用qt-3.3的designer来设计界面,则以下步骤生成的okform.cpp和okform.h需要修改)

Step 3:

         由okform.ui生成okform.h和okform.cpp:

        #uic -o okform.h okform.ui

        #uic -o okform.cpp -impl okform.h okform.ui   

  

Step 4:

         为工程编写一个主程序:

    

    #include <qapplication.h>

    #include "okform.h"

    int main(int argc ,char **argv)

    {

        QApplication a(argc,argv);

        okForm ok;

        a.setMainWidget(&ok);

        ok.show();

        return a.exec();

    }   

Step 5:

    修改tmake配置文件,以生成合适的Makefile:(只要第一次改好即可,不需每次都改)

    在$TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf文件里需要修改的地方如下:

    TMAKE_LINK              = arm-linux-g++

    TMAKE_LINK_SHLIB        = arm-linux-g++

    TMAKE_LIBS_QT           = -lqpe -lts

Step 6:

    移除okform.ui这个文件,然后利用qmake 生成project文件:

    #qmake -project

    这样便生成了qt_test.pro(由当前目录名决定工程的名称)

    也可以通过以下命令来生成:

    #progen -t app.t -o qt_test.pro

   

Step 7:

    用tmake来生成Makefile

    #tmake -o Makefile qt_test.pro   

Step 8:

    #make

     到此就生成了arm平台上的Qt 程序,通过NFS或其他手段拷贝到开发板上运行即可.

posted @ 2012-11-18 17:38 姚先进 阅读(219) | 评论 (0)编辑 收藏
 

1.Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

【硬连接】
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索 引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和 其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软连接】
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

2.通过实验加深理解
[oracle@Linux]$ touch f1          #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory

通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f1文件无效


3.总结
依此您可以做一些相关的测试,可以得到以下全部结论:
1).删除符号连接f3,对f1,f2无影响;
2).删除硬连接f2,对f1,f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

 

posted @ 2012-11-18 17:18 姚先进 阅读(362) | 评论 (0)编辑 收藏
 
这里简单说一下使用的区别
qt 2.x和qte 2.x都是使用tmake产生makefile的
qt 3.x和qte 3.x及以上都是使用qmake产生makefile的

对于qtopia,没有仔细检验,大致是这样的
qtopia 1.7.0及以下是使用tmake的
qtopia 1.7.0以上(不含qtopia 1.7.0)是使用qmake的

在qte3以前,还分qmake和tmake,它们都是用来生成makefile的,它们的区别是:

     qmake一般用于生成本地makefile。

     例如:hello目录下有main.cpp hello.cpp hello.h
cd hello
qmake -project // 将生成hello.pro
qmake hello.pro -o makefile // 将生成makefile

     tmake既可用于生成本地的makefile,也可用于生成用于交叉编译的makefile,区别在于设置TMAKEPATH路径的不同,一个用于x86,一个用于arm或别的处理器。
     例如:hello目录下有main.cpp hello.cpp hello.h
export TMAKE=...../tmake-*.** // tmake的安装目录
export PATH=$TMAKE/bin:$PATH
export TMAKEPATH=$TMAKE/lib/qws/linux-arm-g++

cd hello
qmake -project // 将生成hello.pro
tmake hellp.pro -o makefile // 将生成交叉编译的makefile

     如果export TMAKEPATH=$TMAKE/lib/qws/linux-x86-g++
tmake hellp.pro -o makefile // 将生成本地的makefile

     但是好像在qte3之后,qmake也可以生成交叉编译的makefile了,我装qte4的时候,弄了两个版本,一个x86,一个是arm的,里面对应 的qmake也就是一个对应x86,一个对应arm,要生成makefile的时候,只要到对应的文件夹下用对应的qmake就行了,连环境变量都不用 设。

、//////////////////////////////////////////////////////////////////////////////////////////////

 网上摘抄,特此说明!!!

posted @ 2012-11-18 16:02 姚先进 阅读(284) | 评论 (0)编辑 收藏
 

Qt工具知多少

一级题目:

Qt Designer — 所见即所得的界面设计工具, 可以用拖拽的方式将控件排布在界面上,支持layout, 支持signal/slot编辑。 生成的文件保存为ui格式, ui是xml格式的普通文本文件, 默认编码为utf8, 所以界面上还可以直接写中文(但是不推荐这么做哦,还是应该用标准的Qt国际化的方法来翻译界面。).

Qt Assistant — 类似MSDN的文档查看工具, 支持html的子集(图片、超链、文本着色), 支持目录结构、关键字索引和全文搜索, 可以很方便的查找Qt的API帮助文档,所以是编程必备、使用率最高的工具。

 

qmake – 用于生成Makefile(编译的规则和命令行)的命令行工具。 它是Qt跨平台编译系统的基础。 它的主要特点是可以读取Qt本身的配置, 为程序生成与库一致的Makefile。

Qt Linguist — 被称为Qt语言家的Linguist是用于界面国际化的重要工具, 但其实它并不能帮你翻译,它的主要任务只是读取翻译文件、为翻译人员提供友好的翻译界面。 听起来这个功能好像不太够, 没错! Linguist必须要和其他工具一起用才能完成Qt国际化。 关于国际化可以参考bug写的Qt国际化和本地化。 另外,大家可能还不知道, Linguist工具从4.5开始可以支持Gettext的PO文件格式了哦~

tmake – 和qmake功能一致,是qmake的前身。从Qt3开始tmake全面被qmake替代。

qtdemo – Qt例子和演示程序的加载器, 也可以看作是Qt提供的一个有用的工具。 有了这个工具, 用户可以很方便的查看Qt提供的多姿多彩的例子程序,从中选择自己需要的, 不仅可以看到程序运行的情况,还可以查看源码和文档。

二级题目:

lupdate – Qt国际化的重要命令行工具之一, 它的功能是从源码文件或其他资源文件中提取需要翻译的字符串,并将之用正确的编码和格式存入ts文件中。 这个ts文件是xml格式的普通文本文件, 但不建议用普通的文本编辑工具来编辑, 最好的方法是用Linguist来处理这个文件。

lrelease – Qt国际化的重要命令行工具之一, 它负责将ts文件转化为程序使用的qm文件。 转化过程最大的变化是去掉了原始文件中所有的空白和未翻译的内容, 并将存储格式压缩, 所以qm文件是保留所有有效信息但占用硬盘最少的格式。

uic – UI Compiler, 顾名思义,这个命令行工具是用来编译ui文件的, 它能把ui文件转化为编译器可以识别的标准C++文件, 生成的文件是一个.h。 这个工具通常情况下不需要用户去手动调用, qmake会帮你管理ui文件和调用uic工具。 具体的可以参考笔者的另外一篇帖子 Qt4中ui文件的使用方法

moc – Meta Object Compiler, 直译过来是元对象编译器, 简单的说这是个预编译工具, 用来生成一些与信号和槽相关的底层代码。 该工具处理带有Q_OBJECT宏的头文件, 生成形如moc_xxx.h, moc_xxx.cpp的C++代码,之后再与程序的代码一同编译。 同样,这个命令行工具也不需要用户手动调用, qmake会在适当的时候调用这个工具的。

三级题目:

后面的题目越来越难了哦~~

rcc – Resource Compiler资源文件编译工具。 Qt的资源系统是自己一套特别的设计, 工程中可以包含后缀为qrc的资源文件, 由rcc工具根据qrc的内容将相关的文件编译为二进制,并与源码编译在一起,保存在应用程序的二进制文件中。 这个命令行工具同样不需要手动调用,由qmake调用。

qconfig – QtEmbedded feature配置工具。 众所周知,嵌入式版本的Qt可以自己定义一个feature定义文件叫qconfig-xxx.h,里面定义一些预定义的宏, 通过这个文件可以在编译阶段去掉一些feature, 以减少Qt库的footprint。 这个qconfig工具就是用来编辑feature定义文件的。 具体的参考笔者的帖子简单Qt裁剪

qt3to4 – 用于Qt3程序升级为Qt4程序的移植工具。 它的原理是根据xml文件里定义的一系列文本替换的规则去做文本替换, 所以…怎么说呢,这个工具的功能比较有限, 不可避免的需要很多人工干预才能解决编译和运行的错误。 故而笔者的建议还是重头写程序比较靠谱。

qvfb – 一般做嵌入式开发的用户对这个工具应该不陌生。 这是个有几分神奇色彩的模拟器, 它可以模拟framebuffer设备(尺寸、色深),还可以通过skin文件模拟硬件键盘的布局(包括特殊键值的按键), 是在x86环境下调试嵌入式程序必不可少的有效工具。 无怪乎minigui也比较无耻的偷窃了这个工具…实在是诱惑力太大了

四级题目:

qtconfig – X11系统下用于配置Qt环境的工具。 可以设定字体、Style、Palette、打印机等。 设定信息会保存在用户家目录,所以可以按不同用户的喜好来设定不同的值。

qcop – 嵌入式环境qtopia带的进程间通讯的工具, 用于进程间的通讯和进程间API的相互调用。

pixeltool – 类似放大镜的工具,可以看清鼠标滑过的每个像素。

findtr – 从源码提出翻译字串,保存为Linux的po格式。 po是Linux系统下国际化方法gettext使用的标准格式, 所以这个工具是为了和Linux本身的国际化方法兼容而提供的。

uic3 – Qt4中提供的处理Qt3 ui文件的工具,生成的代码是Qt4的代码,可以放在Qt4的工程里使用。 值得注意的是,uic3生成的代码有一部分会使用Qt3Support库的API, 不是纯的Qt4代码。

phonesim – Qtopia里带的奇妙工具, 用于调试手机环境。 可以模拟提供AT命令接口的modem设备。 有了这个工具就可以在桌面环境下调试应用和modem之间的交互逻辑, 简单的说Qtopia里像接打电话、收发短信、STK程序等功能都是靠这个工具来调试的。

makeqpf – Qt为了嵌入式环境的需要自创了一种字体格式叫qpf, 这个格式是个位图字体, 它把已经预渲染的文字直接保存成二进制内容, 使用的时候可以用内存映射加载, 从加载到绘制的过程不需要计算,所以速度非常快。 makeqpf工具就是用来创建qpf格式的字体的,它可以读取系统中的字体格式, 根据用户的设定生成特定字号规格的qpf文件供用户使用。

五级题目:

这些工具我也不熟。。就不多说了。。

lconvert – 4.5版本新引入的工具, 用于翻译文件之间的格式转换, 将ts格式转换为其他工具可读取的XLIFF格式。

qdbusxml2cpp – QtDBus XML编译器, 用于将xml格式的DBus远程调用的对象和函数API的描述文件翻译为C++代码。 这个工具创建的是个代码的框架,里面的API具体实现要用户自己来填充。

D-Bus Viewer — 可以用来查看D-Bus对象及其对外提供的API, 可以通过双击API的方式调用某个方法, 还可以注册信号, 这样所有发出的信号都会显示在窗体中。

IDC – ActiveQt模块提供的命令行工具,用于将Qt二进制转化为COM server。 该工具由qmake调用,不需要手工执行。

dumpcpp – ActiveQt模块的命令行工具, 可以为一个类型库创建C++的命名空间。

dumpdoc – ActiveQt模块的命令行工具,可以为COM对象创建Qt风格的文档。

testcon – ActiveQt模块的命令行工具, 全称为ActiveX Test Container, 也就是可以作为ActiveX控件的容器, 这样可以把控件安装到系统中再测试。 该工具会提供详细的事件和属性变化的log信息。

Qt Script Debugger — 用于调试Qt Script的工具,可以单步运行,查看输出等。 Qt文档里有很详细的一篇专门讲这个的,有兴趣的来看下: Qt Script Debugger Manual


posted @ 2012-11-18 15:54 姚先进 阅读(814) | 评论 (0)编辑 收藏
 
     摘要:         lz安在ubuntu上安装好qtopia后,乐得屁颠屁颠的,一个礼拜工作终于看到成果了,常言道乐极生悲,果然是这样,关机时就有一种不祥的感觉,果然,再开机时发现ubuntu居然崩溃了,东流水,不回头,什么都没有了,关键是,我特别喜欢这个ubuntu,用了很久,感情深厚,然后就失落了一整天!   ...  阅读全文
posted @ 2012-11-18 15:43 姚先进 阅读(228) | 评论 (0)编辑 收藏
 

一句话解决!
posted @ 2012-11-14 21:27 姚先进 阅读(371) | 评论 (0)编辑 收藏
 
     摘要: 安装 qtopia1.准备安装包 注意: qt-x11xx    qt-emxx  qtopiaxxx 版本之间要相互对应,    http://www.360 doc.com/content/12/0601/10/10102389_215143511.shtml推荐你看看这位的qt总结2.解压tar -zxvf  x...  阅读全文
posted @ 2012-11-14 21:26 姚先进 阅读(485) | 评论 (0)编辑 收藏
 


安装 libX11-dev libXext-dev libXtst-dev

于是
yum install libXau-devel

接着执行
rpm  -ivh libXext-devel-1.0.4-1.fc9.i386.rpm

最后,./configura果然,错误解决了。

最后我们来总结一下,要解决这个问题只需要几个库就可以了呢,

实际上只要两个:

yum install libXau-devel

执行完上面这条语句后,我在执行

yum install ibX11-devel

打印信息显示,该package已经安装

最后在安装

libXext-devel就可以了
posted @ 2012-08-30 21:51 姚先进 阅读(2028) | 评论 (0)编辑 收藏
仅列出标题
共7页: 上一页 1 2 3 4 5 6 7 下一页