QT常见界面设计组件——字符串的输入输出

一、字符串与数值之间的转换

界面设计最常用到的组件就是QLabel和QLineEdit;

QLabel用于显示字符串,QLineEdit用于输入和显示字符串

两个函数都涉及到QString类。QString类是Qt程序中经常使用的类,用于处理字符串,可以实现字符串与数值之间的转换

接下来在Qt中设计一个工程,完成字符串与数值间的转换

界面效果如下:

其中,上方的几个组件构成了一个GridLayout,下面的几个组件也是一个GridLayout,两个GridLayout又和它们之间的VerticalSpacer构成了一个VerticalLayout

1.普通数值与字符串之间的转换

选中上方的计算按钮,在右键快捷键里单击"Go to slot...",并在弹出的界面中选择clicked()信号创建槽函数,之后在自动生成的函数体中编写如下的代码,以实现相应功能

void Widget::on_btn_cal_clicked()
{
    QString str = ui->editNum->text();  //读取"数量"
    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);
}

//editNum、editTotal、editPrice分别为相应的组件名

2.进制转换

选中十进制后的转换按钮,同上面的构建信号与槽的方式相似,创建数字进制转换的槽函数,内容如下:

void Widget::on_btnDec_clicked()
{
    QString str = ui->editDec->text();      //获取十进制数值
    int val = str.toInt();
    str=str.setNum(val,16);                 //转化为十六进制数字
    str=str.toUpper();                      //将字符串中的小写字母转化为大写
    ui->editHex->setText(str);

    str=str.setNum(val,2);                  //转化为二进制数字
    ui->editBin->setText(str);
}

//editBin、editDec、editHex分别为二进制、十进制、十六进制的组件名

 同理创建二进制和十六进制的数值转化槽函数

转换进制的槽函数内容如下

void Widget::on_btnBin_clicked()
{
    QString str = ui->editBin->text();      //获取二进制数值
    bool ok;
    int val = str.toInt(&ok,2);             //以二进制读入

    str=QString::number(val,10);            //转化为十进制数字
    ui->editDec->setText(str);

    str=str.setNum(val,16);                 //转化十六进制数字
    str=str.toUpper();
    ui->editHex->setText(str);
}

void Widget::on_btnHex_clicked()
{
    QString str = ui->editHex->text();      //获取十六进制数值
    bool ok;
    int val = str.toInt(&ok,16);            //以十六进制读入

    str=QString::number(val,10);
    ui->editDec->setText(str);

    str=str.setNum(val,2);                  //转化为二进制数字
    ui->editBin->setText(str);
}

二、QString的常用功能

QString是Qt编程常用的类,除了用作数字量的输入输出,QString还有很多的其它功能

QString储存字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,因此QString能够处理中文字段,而且一个汉字算是一个字符

对QString常用函数的测试用例如下图所示

具体实现过程如下,每个函数的功能都在各自槽函数有注释

详细代码如下

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btn_app_clicked();

    void on_btn_pre_clicked();

    void on_btn_toup_clicked();

    void on_btn_tolow_clicked();

    void on_btn_left_clicked();

    void on_btn_right_clicked();

    void on_btn_tri_clicked();

    void on_btn_sim_clicked();

    void on_btn_count_clicked();

    void on_btn_size_clicked();

    void on_btn_index_clicked();

    void on_btn_lastindex_clicked();

    void on_btn_ends_clicked();

    void on_btn_starts_clicked();

    void on_btn_contains_clicked();

    void on_btn_isnull_clicked();

    void on_btn_isempty_clicked();

    void on_btn_section_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

 

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

 

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_btn_app_clicked()
{
    //在字符串后添加字符串
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.append(str2);
    ui->editresult->setText(str1);
}

void Widget::on_btn_pre_clicked()
{
    //在字符串前面添加字符串
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.prepend(str2);
    ui->editresult->setText(str1);
}

void Widget::on_btn_toup_clicked()
{
    //将字符串中的小写字母转为大写字母,大写字母不变
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.toUpper();
    str2 = str2.toUpper();

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_tolow_clicked()
{
    //将字符串中的大写字母转为小写字母,小写字母不变
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.toLower();
    str2 = str2.toLower();

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_left_clicked()
{
    //left函数表示从字符串左边取指定长度,中文被看作一个字符
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.left(5);        //默认取5个字符
    str2 = str2.left(5);

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_right_clicked()
{
    //right函数表示从字符串右边取指定长度,中文被看作一个字符
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.right(5);        //默认取5个字符
    str2 = str2.right(5);

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_tri_clicked()
{
    //trimmed函数功能是去掉字符串首尾空格
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.trimmed();
    str2 = str2.trimmed();

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_sim_clicked()
{
    //simplified不仅去掉字符串首尾空格,中间的连续空格也被单个空格替代
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    str1 = str1.simplified();
    str2 = str2.simplified();

    if(!str1.isEmpty())
        ui->editresult->setText(str1);
    else if (!str2.isEmpty()) {
        ui->editresult->setText(str2);
    }
}

void Widget::on_btn_count_clicked()
{
    //count函数返回字符串的字符个数,中文字符被当作一个字符
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int num;

    if(!str1.isEmpty()){
        num = str1.count();
        ui->editresult->setText(QString::number(num));
    }
    else if (!str2.isEmpty()) {
        num = str2.count();
        ui->editresult->setText(QString::number(num));
    }
}

void Widget::on_btn_size_clicked()
{
    //size函数返回字符串的字符个数,中文字符被当作一个字符
    //length函数和size、count函数一样,都能返回字符串的长度
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int num;

    if(!str1.isEmpty()){
        num = str1.size();
        ui->editresult->setText(QString::number(num));
    }
    else if (!str2.isEmpty()) {
        num = str2.size();
        ui->editresult->setText(QString::number(num));
    }
}

void Widget::on_btn_index_clicked()
{
    //indexOf的作用是查找某个字符串最早出现的位置
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int local;

    local = str1.indexOf(str2);
    ui->editresult->setText(QString::number(local));
}

void Widget::on_btn_lastindex_clicked()
{
    //lastIndexOf的作用是查找某个字符串最后出现的位置
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int local;

    local = str1.lastIndexOf(str2);
    ui->editresult->setText(QString::number(local));
}

void Widget::on_btn_ends_clicked()
{
    //endsWith判断字符串是否以某个字符结束
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int res;

    res = str1.endsWith(str2);
    ui->editresult->setText(QString::number(res));
}

void Widget::on_btn_starts_clicked()
{
    //startsWith判断字符串是否以某个字符开始
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int res;

    res = str1.startsWith(str2);
    ui->editresult->setText(QString::number(res));
}

void Widget::on_btn_contains_clicked()
{
    //contains函数判断字符串中是否包含某个字符串
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2
    int res;

    res = str1.contains(str2);
    ui->editresult->setText(QString::number(res));
}

void Widget::on_btn_isnull_clicked()
{
    //isNull和isEmpty都判断字符串是否为空,但是稍有差别
    //加入一个字符串之有'\0',isNull返回false,isEmpty返回true
    //只有未赋值的字符串,isNull才返回true
    //只实现str1
    QString str1 = ui->editStr1->text();    //获取str1

    if(!str1.isNull())
        ui->editresult->setText("flase");
    else {
        ui->editresult->setText("true");
    }
}

void Widget::on_btn_isempty_clicked()
{
    //只实现str1
    QString str1 = ui->editStr1->text();    //获取str1

    if(!str1.isEmpty())
        ui->editresult->setText("flase");
    else {
        ui->editresult->setText("true");
    }
}

void Widget::on_btn_section_clicked()
{
    //section能从字符串中提取sep作为分隔符,从start端到end端
    QString str1 = ui->editStr1->text();    //获取str1
    QString str2 = ui->editStr2->text();    //获取str2

    str1 = str1.section(str2,0,1);          //假如一个字符串用","分为若干段,则这些段的编号为0,1,2...,则该槽函数取前两段字符串
    ui->editresult->setText(str1);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值