Qt数据类型与强制转换

Qt数据类型与强制转换

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

变量(Variable)和对象(Object)

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

 

数字(Number)和字符(String)

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

 

整数(Integer)和长整数(LongInteger)

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

 

浮点数(Float)和小数(Decimal)

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

使用Decimal的例子:

importdecimal

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。

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

 

集合(Collection)

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

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

 

元组(Tuple)

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

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

例如:

ex1=a,b,c

ex2=(a,b,c)

是一样的。

 

列表(List)

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

 

字典(Dictionarie)

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

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

 

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

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

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

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

例如:

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

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

 

内建函数(Build-inFunction)

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

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

in,not in,len(),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";

doubleval=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时,并且基数必须在2到36之

间。如果基数为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;

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

QStringstr=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年MM月dd日ddddhh:mm:ss");
如果不是QTime和QDate类比如说:通过TCP/IP接收到的charunsigned 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);
}

来自: http://hi.baidu.com/ruwind2010/blog/item/3cee9b53a0059a501038c2cc.html

各种数据类型的相互转换
char * 与 const char *的转换
char *ch1="hello11";
const char *ch2="hello22";
ch2 = ch1;//不报错,但有警告
ch1 = (char *)ch2;

char 转换为 QString
其实方法有很多中,我用的是:
char a='b';
QString str;
str=QString(a);

QString 转换为 char
方法也用很多中
QString str="abc";
char *ch;
ch = str.toLatin1.data();

QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();

char * 转换为 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);

QString 转换为 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();


QByteArray 转换为 QString
QByteArray byte;
QString string;
string = QString(byte);
这里再对这俩中类型的输出总结一下:
qDebug()<<"print";
qDebug()<<tr("print");
qDebug()<<ch;(ch 为char类型)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray类型)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 为Qstring类型)
但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
qDebug()<<tr(str.toLatin1);

int 转 QString
int a=10;
QString b;
b=QString::number(a)

QString 转int
QString a="120"

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值