2021.6.5:QT——字符串与数字间的转换

Qt界面设计时,最常用的组件是QLabelQLineEdit,其中QLabel用于文本显示,而QLineEdit用于文本编辑。它们都有如下两个函数用于读取设置显示文字:

QString text() const;//Read
void setText(const QString &)//Write

这两个函数都涉及到QString类。QString类是QT程序中经常使用的类,用于字符串处理。QString类可以进行String数字之间的转换,如此,通过QLineEdit就可以实现数字的输入与输出。

 

下图是我们设计的窗体,是基于QWidget创建的可视化窗体。界面设计使用了布局管理,窗体上组件的布局是:上方几个组件是一个GridLayout,下方的9个组件也是一个GridLayout,两个GridLayout和中间一个Vertical Spacer又组成一个VerticalLayout

 

 在布局设计时,要巧妙运用Vertical SpacerHorizontal Spacer,还要会设置组件的MaximumSizeMinimumSize属性,以取得期望的布局效果。例如上图中,两个GridLayout间放了一个垂直间隔(Vertical Spacer),当窗体变大时,两个GridLayout的高度并不会发生变化;而如果不放这个垂直间隔,两个GridLayout的高度都会发生变化,GridLayout内部组件的垂直距离会发生变化。

在UI设计器里,选中图1中的“计算” ,为其设置对应的槽函数(“Go to slot...”),并在出现的对话框中选择clicked()信号创建槽函数,并在自动生成的函数体中编写如下的代码,实现从界面上分别读取数量单价,相乘计算后将结果再显示到文本框中:

void Widget::on_btnCalc_clicked()
{
    QString str = ui->editNum->text();//读取数量n
    int num = str.toInt();
    str = ui->editPrice->text();//读取单价
    float price = str.toFloat();
    float total = num*price;
    str = str.sprintf("%.2f",total);
    ui->editTotal->setText(str);
}

QString类从字符串转换为整数的函数有:

int toInt(int base = 10)
long toLong(int base = 10)
short toShort(int base = 10)
uint toUInt(int base = 10)
ulong toULong(int base = 10)

参数是转换基数,还可以设置2、8、16表示相应的进制。

 

QString将字符串转换为浮点数的函数有:

double toDouble()
float toFloat()

 

在得到单价和数量后,做相乘计算,得到计算变量total,再将此数值显示在编辑框editTotal中。由于计算结果是浮点数,希望显示两位小数,下面4行语句都可以实现这个功能:

str = QString::number(total,'f',2);
str = QString::asprintf("%.2f",total);
str = str.setNum(total,'f',2);
str = str.sprintf("%.2f",total);

前两个是QString的静态函数number()asprintf(),也可以使用QString的成员函数setNum()sprintf()。QString中的sprintf()和C中的同名函数格式相同。而setNum()number()函数使用另一种格式定义,而且它俩有多个重载函数定义,可以处理各种类型的整数浮点数,在处理整数时还可以指定进制,例如将一个整数直接转换成十六进制或二进制字符串。

进制转换

以下是读取十进制数据转换为二进制十六进制QString的按钮的槽函数代码:

void Widget::on_btnConv1_clicked()
{
    //读取十进制数,转换为其它进制
    QString str = ui->editDecimal->text();
    int val = str.toInt();
    str = str.setNum(val,16);//十六进制
    //或者str = QString::number(val,16);
    str = str.toUpper();
    ui->editHex->setText(str);
    str = str.setNum(val,2);//二进制
    //或者str = QString::number(val,2);
    ui->editBinary->setText(str);
}

将一个整数转换为不同进制的字符串,可以使用QString成员函数setNum()静态函数number(),它们的函数原型是:

QString & setNum(int n , int base = 10);
QString number (int n , int base = 10);

 

其中n是待转换的整数,base是使用的进制。

下面是读取二进制QString,然后转换为十进制和十六进制显示的按钮的槽函数代码:

void Widget::on_btnConv2_clicked()
{
    QString str = ui->editBinary->text();
    int val = str.toInt(NULL,2);
    str = str.setNum(val);
    ui->editDecimal->setText(str);
    str = QString::number(val,16);
    str.toUpper();
    ui->editHex->setText(str);
}

 总结

 1、最常用的文本显示编辑组件是QLabel、QLineEdit,它们都有两个函数用于读取、设置文字:

QString text();//Get Text
void setText( QString );//Set Text

其中都涉及到了QString类——QT中的字符串QString模块可以方便的进行QString数字间的转换。

 2、假设一个Line Edit控件对应的对象名editxxx,对它可以进行的读取、转换、设置操作的语句如下:

QString str = ui->editxxx->text(); //get 控件内容

int num = str.toInt();//将之前的String转换为int类型

str = str.sprintf( "%.2f is %d", arr1 , arr2 );//格式化一个String
ui->editxxx->setText( str );//set 控件内容 为 之前格式化的String

3、格式化字符串的4种方法:

str = QString::number(total,'f',2);
str = QString::asprintf("%.2f",total);
str = str.setNum(total,'f',2);
str = str.sprintf("%.2f",total);

4、将一个整数转换为不同进制的字符串,可以用QString成员函数setNum()静态函数number(),它们的函数原型是:

QString & setNum(int n , int base = 10);
QString number (int n , int base = 10);

使用时:

QString str = ui->editxxx->text();

int val = 10;
QString str1 = str.setNum( val , 16 );
QString str2 = QString::number( val , 16 );

 

 

posted @ 2021-06-05 14:24  ShineLe  阅读(1728)  评论(0)    收藏  举报