现在做过的QT项目有计算器,
扫雷,
贪吃蛇(基本算法),
视频播放器(medplayer)(主要的是搭配视频浏览器的解码),
图片浏览器,
自动寻迹的小球,
五子棋(用到了贪心算法),
模仿qq的聊天室(基于网络编成的udp和tcp协议)。
用于压缩和解压的程序,
模仿文件系统(完成文件的创建,文件的写入,文件的删除)
实现图片的格式的转化问题。
为什么文件直接改变文件的后缀名,就会打不开文件。
.jpg文件格式
ÿØÿà^@^PJFIF^@^A^A^A^@^A^@^A^@^@ÿÛ^@| 1 ÿØÿà^@^PJFIF^@^A^A^@^@d^@d^@^@ÿÛ^@C
C^@^F^D^E^F^E^D^F^F^E^F^G^G^F^H | ^@^F^D^E^F^E^D^F^F^E^F^G^G^F^H
2 ^P
.png格式的文件
<89>PNG^M
2 ^Z
// 我们用 isChecked() 来检查 check_one, 如果 check_one 被选择
QStringList类提供了一个字符串列表
从QList <QString>继承而来,它提供快速索引为基础的接入以及快速插入和清除
其成员函数用于操作这个字符串列表如
append(),insert(), replace(), removeAll(), removeAt(), removeFirst(), removeLast(), and removeOne()等
1. 增加字符串
可以通过append(),或使用<<,如
QStringList fonts;
fonts << "Arial" << "Helvetica" << "Times" << "Courier";
// fonts:[ "Arial" ,"Helvetica", "Times" , "Courier"]
2. 合并字符串使用join( )
QString str = fonts.join(",");
// str == "Arial,Helvetica,Times,Courier"
3. 拆分字符串
QString str = " Arial,Helvetica, ,Times,Courier ";
QStringList list1 = str.split(",");
// list1: [ " Arial ", " Helvetica ",” “, " Times ", " Courier " ]
QStringList list2 = str.split(",", QString::SkipEmptyParts);
// list2: [ " Arial ", " Helvetica ", " Times ", " Courier " ]
也就是说如果有QString::SkipEmptyParts,空项不会出现在结果。默认情况下,空项被保留
4. 索引
IndexOf()函数返回给定字符串的第一个出现的索引。
而lastIndexOf()函数,返回字符串的最后一次出现的索引。
5. 替换replaceInStrings()
QStringList files;
files << "$QTDIR/src/moc/moc.y"
<< "$QTDIR/src/moc/moc.l"
<< "$QTDIR/include/qconfig.h";
files.replaceInStrings("$QTDIR", "/usr/lib/qt");
// files: [ "/usr/lib/qt/src/moc/moc.y", ...]
6. 过滤filter()
可以让你提取一个新的列表只包含这些字符串包含一个特定的字符串(或匹配特定正则表达式):
QStringList list;
list << "Bill Murray" << "John Doe" << "Bill Clinton";
QStringList result;
result = list.filter("Bill");
// result: ["Bill Murray", "Bill Clinton"]
process.start(“convert”, args);
这样就可以调用外部的函数了。
QProcess类用于启动外部程序并与之通信。
启动一个新进程的方式:把待启动的程序名称和启动参数传递给start()函数即可。
例如:
QProcess *parent;
QString program = “tar”;
QStringList arguments;
arguments << "czvf" << "backup.tar.gz" << "/home";
QProcess *myProcess = new QProcess(parent);
QProcess->start(program,arguments);
当调用start()函数后,myProcess进程立即进入启动状态,但tar程序尚未被调用,不能读写标准输入输出设备,当进程完成启动后就进入“运行状态”并向外发出started()信号。在输入输出方面,QProcess将一个进程看做一个流类型的I/O设备,可以像使用QTcpSocket读写流类型的网络连接一样来读写一个进程,可以通过QIODevice::write()函数向后所启动的标准输入写数据,也可以通过QIODevice::resd().QIODevice::readLine()和QIODevice::getChar()从这个进程的标准输出读数据。此外由于QProcess是从QIODevice类继承而来的,所以它也可以作为QXmlReader的数据在源,或者为QFtp产生上传数据。最后,当进程退出时QProcess进入起始状态--“非运行状态”,并发出finish()信号。
void finished(int exitCode, QProcess::ExitStatus exitStatus)先好在进程中返回了进程退出的退出码和退出状态,可以调取exitCode()函数和exitStatus()函数分别获取最后退出进程的这两个值。其中“退出状态”只有正常退出和进程崩溃两种,分别对应值QProcess::NormalExit(值0)和Qprocess::CrashExit(值1)。当进程在运行中产生错误时,QProcess将发出error()信号,可以通过,调用error()函数返回最后一次产生错误的类型,并通过state()找出此时进程所处的状态。Qt定义了如下的错误类型代码:
错误常量
convert命令常用图片操作
identify 4.jpg
63.eps PNG 580x326 580x326+0+0 16-bit sRGB 231KB 0.000u 0:00.000
$convert test.jpg -resize 330x test_330x.jpg (限宽330)
http://blog.csdn.net/u011944141/article/details/51658012
http://blog.csdn.net/u011944141/article/details/51658012
这里可以看成是调用系统函数convert()的实现,将图片转化为固定的格式。
我们这里的64位机器,它的整形是8位的。
return (long long)(listNode[index.row()].treeNode);
在c++里面遇到的字节问题:
下面连接里面讲的很详细:
http://blog.csdn.net/sky_qing/article/details/11650497
在上面的错误中:
error: cast from ‘NavModel::TreeNode*’ to ‘unsigned int’ loses precision [-fpermissive]
return (unsigned int )(listNode[index.row()].treeNode);//precision
^
很明显是因为在强格式转化时:由于在右边,数据的字节数为8个字节,强制转化为unsigned int 的类型为4字节,所以转化时会出现精度丢失的问题。
Linux wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。
c++部分
面向对象的编程和面向过程的编程的PK
在c++里面引入了类的概念,引入了面向对象编程的思想,一个类定义一个具体的对象,有具体的对象实现具体的功能。
c++来自于c,但是c++有什么优点呢???
回顾c展望c++
1.C的优缺点:
1>优点:
(1)一级指针,二级指针,多级指针
int *p,**p,*****p
(2)指针数组,数组指针(行指针)
int *p[2];int (*p)[2]
(3)函数指针,指针函数,函数指针数组,函数指针函数
` “
int func(int a)
int (*p)(int ) = func
(*p)(1);//函数指针的使用
2>缺点:
代码的复用率太差
2.c++的展望
1>提高代码的复用率
2>继承性
1--->cout
(1)输出内容
(2)cout可以自动识别值(基本类型)的内容是什么,不需要%d,%sl%c等占位符