LIULIANG

QT类型转换

Qt数据类型与强制转换(整理)

变量(Variable)和对象(Object

python中的变量不需要声明,因为python是动态语言。python中所有的东西都是对象。

 

数字(Number)和字符(String

python中包括几种(整数、浮点数、长整数)数字类型和两种字符类型。

 

整数(Integer)和长整数(Long Integer

Python提供了三种整数类型:boolintlongbool类型只有两个值TrueFalse,在数值环境中被当作10对待。long类型支持的数字的大小仅受机器内存大小的限制。使用long类型的例子:q=7L。唯一不足的是:long类型比int类型慢。

 

浮点数(Float)和小数(Decimal

Python提供了三种浮点值:floatDecimalcomplex。其中float的值为双精度浮点数,表示的范围决定于编译pythonC(或Java)编译器。由于计算机表示浮点数的方式的原因,会导致小的误差。float使用64位表示浮点数。如果需要更高的精确度,可以使用decimal模块中的Decimal数字(默认使用28位表示小数部分)。但是运行的时候比float慢很多。Decimal数字适用于金融计算。

使用Decimal的例子:

import decimal

decimal.Decimal("5.1")

decimal.Decimal("8.9e-4")

Python也提供了内建的复数类型:complex。但是使用j作为虚数单位。例如:c=5.4+0.8j

 

字节字符串(Bytestring),Unicode字符串(Unicode String)和QString

Python中有两种内建的字符串:str(表示字节字符串)和unicode(表示Unicode字符)。PyQt提供了第三种字符串类型:QString

the safest route is to use strs for 7-bit ASCII and for raw binary 8-bit bytes, and unicode or QString otherwise.

 

集合(Collection

内建的集合类型有:tuple(元组)、list(列表)、dict(字典)、setfrozenset。其中tuplefrozenset是不可变的,其它都是可变的。

Python标准库中有一个集合类型,此类型不包含类型索引,而是包含指定类型的数字。这就是array类型。它使用在需要存储大量的数字并且运行效率尽可能高的情况下。

 

元组(Tuple

元组表示的是一个包含零个或更多个对象索引的有序序列。元组支持序列函数(如len())。这使得我们从元组中提取项目十分容易。然而,由于元组是不可变的,所以我们不能替换或者删除其中的项目。但我们可是通过把元组转换成列表间接实现此目的。

创建元组时,使用与不使用圆括号“()”都可以得到一个元组,这是没有区别的。

例如:

ex1=a,b,c

ex2=(a,b,c)

是一样的。

 

列表(List

列表是与元组类似的有序序列。在字符串和元组中使用的序列函数及切片工具均严格适用于列表。与元组的区别是,列表可变,拥有可以用来改变它的函数。创建列表的时候,必须方括号“[]”或者使用list()构造器。

 

字典(Dictionarie

dict类型是一个数据字典,也被看成联合数组。字典包含一组无序的对以及提供快速的键查询。字典中的键必须是唯一的,并且是不可变的,如元组、字符串或数字;值可以是任意类型。它和Perl中的hashJava中的HashMapC++中的unordered_map类似。

字典可以使用dict()构建器构建。

 

集合(Set)(和数学上的集合定义比较接近)

Python提供了两种set类型:setfrozenset。它们都是无序的,因此都不是序列。Set可变,它的项目可增加或移除。Frozenset不可变,不能被改变。所以,Frozenset也能用作字典的

Set中的项目是唯一的;试图增加一个已存在于set中的项目到set中,add()方法将什么也不做。包含相同项目的两个set相等,而不管其中项目的插入顺序。set和只有而无的字典类似。

frozenset可以使用单一的序列参数创建,例如,元组或列表。set也可以使用相同的方式创建。

例如:

unicorns = set(("Narwhal","Oryx","Eland"))

如果创建的是set对象,那么就可使用add()remove()方法来增加和移除set中的项目了。

 

内建函数(Build-in Function

Python中有大量的内建函数和操作符:例如,delprintlen()type()help()dir(str), range(), open(), hasattr(), isinstance(), max(), min()

set相关的一些内建函数与操作符:

innot inlen(), clear(), copy(), add(), remove(), discard(), issubset(), issuperset(), union(), intersection(), difference()

一些与序列(元组,列表,字典)相关的内建函数与操作符:

all, any, in, not in, len(), max(), min(), sum()

一些数学相关的内建函数

abs(),divmod(i,j),hex(i),oct(i),float(x),int(x),long(x),pow(x,y),round(x,n)

类型转换

QString转换为 double类型

方法1.QString str="123.45";

double val=str.toDouble(); //val=123.45

方法2.很适合科学计数法形式转换

bool ok;

double d;

d=QString("1234.56e-02").toDouble(&ok); //ok=true;d;12.3456.

QString转换为float

1.QString str="123.45";

float d=str.toFloat(); //d=123.45

2.QString str="R2D2";

bool ok;

float d=str.toFloat(&ok); //转换是被时返回0.0,ok=false;

QString形转换为整形

1.转换为十进制整形

注意:基数默认为10。当基数为10时,并且基数必须在236

间。如果基数为0,若字符串是以0x开头的就会转换为16进制,若以0开头就转换为八进制,否则就转换为十进制。

Qstring str="FF";

bool ok;

int dec=str.toInt(&ok,10); //dec=255 ; ok=rue

int hex =str.toInt(&ok,16); //hex=255;ok=true;

3.常整形转换为Qstring

long a =63;

QString str=QString::number(a,16); //str="3f";

QString str=QString::number(a,16).toUpper(); //str="3F";

Qstring 转换char*问题!

方法一:
QString qstr("hello,word");
const char * p = qstr.toLocal8Bit().data();
方法二:
const char *p = qstr.toStdString().data();
转换过来的是常量

把当前时间转化为QString...

public QDateTime qdate = QDateTime.currentDateTime();
datetime = qdate.toString("yyyy
MMddddddhh:mm:ss");
如果不是QTimeQDate类比如说:通过TCP/IP接收到的char unsigned char 类等如何转换为QString
QString Time2String( DWORD dwTime)
{
char cTime[50] = {0};
memset(cTime,0,50);
strftime(cTime,32,"%Y-%m-%d %H:%M:%S",localtime(&time_t(dwTime)));
return QString(cTime);
}

 

最后补充的 QString转换为char* 
 QString str1 = "Test";
 QByteArray ba = str1.toLatin1();
 const char *c_str2 = ba.data();
 printf("str2: %s", c_str2);


由于经常使用C/C++类型,最后又要将其显示到界面上,所以会经常用到转换成QString方法,如果是char型比较好办,其他类型则会用到arg方法


char* 转 QString:

点击(此处)折叠或打开

  1. char port[10] = "COM3";
  2. QString szPort = QString(port);

int 转 QString :

点击(此处)折叠或打开

  1. int index=1;
  2. QString szId = QString::number(index)

float/double 转 QString :

点击(此处)折叠或打开

  1. float fSpeed = 3.2;
  2. QString szSpeed = QString::number( fSpeed, 'f', 2 ); //szSpeed的内容为"3.20"

多个变量 到 QString:

点击(此处)折叠或打开

  1. char port[10] = "COM2";
  2. int baudrate = 9600;
  3. QString szFailed = QString("Open %1 baudrate %2 failed!").arg(port).arg(baudrate);

中文 到 QString:

点击(此处)折叠或打开

  1. QString szOpened = QString::fromLoacal8Bit("打开串口");

中文和变量组合 到 QString:

点击(此处)折叠或打开

  1. char port[10] = "COM2";
  2. int baudrate = 9600;
  3. QString szFailed = QString::fromLoacal8Bit("打开串口%1, 波特率%2").arg(port).arg(baudrate);


 




 

posted on 2012-05-07 14:58 BIG森林 阅读(5213) 评论(0)  编辑 收藏 引用 所属分类: QT


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜