常用界面设计组件 —— 字符串与输入输出组件(QT)

发布时间:2024年01月15日

2.2 字符串与输入输出组件

2.2.1 字符串与数值之间的转换

界面设计时使用最多的组件恐怕就是QLabel和 QLineEdit了,QLabel用于显示字符串,QLineEdit用于 显示和输入字符串。这两个类都有如下两个成员函数用 于读取和设置显示文字。

QString text() const;
void setText(const QString &text);

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

下图为基于QWidget创建的可视化窗体。

在这里插入图片描述

选中"=",右键快捷菜单中单击“转到槽…”,并在对话 框里选择 clicked() 信号创建槽函数,在自动生成的函数 体编写如下代码,实现从界面中读取用户输入的数量和 单价,相乘计算后将结果显示到总价对应的文本框里。

/* mainwindow.cpp */

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

void MainWindow::on_pushButton_clicked()
{
    //获取用户输入数量字符串
    QString text = ui->le_num->text();
    int num = text.toInt();
    //获取用户输入的单价字符串
    text = ui->le_price->text();
    double price = text.toDouble();

    double sum = num * price;
    //double ----------> QString
    text = text.asprintf("%.2f", sum);
    ui->le_sum->setText(text);
}

小结:

  • 字符串转数字

    int toInt(bool *ok = nullptr, int base =10) const
    long toLong(bool *ok = nullptr, int base= 10) const
    short toShort(bool *ok = nullptr, intbase = 10) const
    uint toUInt(bool *ok = nullptr, int base= 10) const
    ulong toULong(bool *ok = nullptr, int base = 10) const
    ushort toUShort(bool *ok = nullptr, int base = 10) const
    double toDouble(bool *ok = nullptr) const
    float toFloat(bool *ok = nullptr) const
    
  • 数字转字符串

    // 将double类型的sum转换为字符串,保留2位小数
    text = QString::number(double(sum), 'f', 2);
    text = QString::asprintf("%.2f", double(sum));// 这个和C语法一致建议重点记忆
    text = text.sprintf("%.2f", double(sum));
    text = text.setNum(sum, 'f', 2);
    

    QString提供了大量的功能,可以通过查看QT帮助手 册得到。例如字符串拼接

    // QString的成员函数,将char数组str追加到当前字符串的末尾
    QString &append(const char *str)
    
    // QString的成员函数,格式化字符串并返回新的字符串,类似于C语言中的printf
    QString QString::arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const
    
    // 使用QString::arg的示例,将i、total和fileName按照给定的格式插入到字符串中
    QString status = QString("Processing file %1 of %2: %3").arg(i).arg(total).arg(fileName);
    

2.2.2 QString的常用功能

QString提供了大量的功能,有助于灵活实现字符串处理 功能,可以可以通过查看QT帮助手册得到。下面举几个 例子。

  • append()和prepend()

     QString x = "free";
     QString y = "dom";
    
     x.append(y);
     // x == "freedom"
    
    QString str1 = "World";
    QString str2 = "Hello ";
    str1.prepend(str2);  // 将 str2 插入到 str1 的开头
    qDebug() << str1;    // 输出:Hello World
    
  • toUpper() 和toLower()

     QString str = "TeXt"; //转大写
     str = str.toUpper();        // str == "TEXT"
    
    QString str = "Hello World";//转小写
    QString lowerStr = str.toLower();
    qDebug() << lowerStr;  // 输出:hello world
    
  • count() 、size() 和 length()

    /*字符串中如果有汉字 每个汉字算一个字符*/
    text = "NI 好啊";
    num = text.size(); // 5
    
  • trimmed() 和simplified()

     QString str = "  lots\t of\nwhitespace\r\n ";
     str = str.trimmed();
     // str == "lots\t of\nwhitespace"
    
    //去除字符串中连续重复的空白字符,同时将字符串两端的空白字符去除。
    QString str = "   Hello    World   ";
    QString simplifiedStr = str.simplified();
    qDebug() << simplifiedStr;  // 输出:Hello World
    
  • indexOf()和lastIndexOf()

    //在字符串中查找第一次出现子字符串的位置。 
    QString x = "sticky question";
     QString y = "sti";
     x.indexOf(y);               // returns 0
     x.indexOf(y, 1);            // returns 10
     x.indexOf(y, 10);           // returns 10
     x.indexOf(y, 11);           // returns -1
    
    //在字符串中查找最后一次出现子字符串的位置。
    QString str = "Hello World Hello";
    int lastIndex = str.lastIndexOf("Hello");
    qDebug() << "Last Index of 'Hello': " << lastIndex;  // 输出:Last Index of 'Hello': 12
    
    
  • append()和arg()

    //将一个字符串或字符追加到当前字符串的末尾 
    QString x = "free";
     QString y = "dom";
    
     x.append(y);
     // x == "freedom"
    
    //将占位符替换为字符串或其他数据
    QString str = "My name is %1 and I am %2 years old.";
    QString formattedStr = str.arg("John").arg(25);
    qDebug() << formattedStr;  // 输出:My name is John and I am 25 years old.
    
    
  • section()

     QString str;
     QString csv = "forename,middlename,surname,phone";
     QString path = "/usr/local/bin/myapp"; // First field is empty
     QString::SectionFlag flag = QString::SectionSkipEmpty;
    
     str = csv.section(',', 2, 2);   // str == "surname"
     str = path.section('/', 3, 4);  // str == "bin/myapp"
     str = path.section('/', 3, 3, flag); // str == "myapp"
    
  • endsWith()和startsWith()

    //判断字符串是否以指定的后缀结束。 
    QString str = "Bananas";
     str.endsWith("anas");         // returns true
     str.endsWith("pple");         // returns false
    
    //判断字符串是否以指定的前缀开始。
    QString str = "Hello World";
    bool startsWithHello = str.startsWith("Hello");
    qDebug() << "Starts with 'Hello': " << startsWithHello;  // 输出:Starts with 'Hello': true
    
    
  • isNull()和isEmpty()

    /* 如果此字符串为空,则返回true;否则返回false。 */
     QString().isNull();             // returns true
     QString("").isNull();           // returns false
     QString("abc").isNull();        // returns false
    
    
    //判断字符串是否为空(长度为 0)。
    QString str = "Hello";
    bool isEmpty = str.isEmpty();
    qDebug() << "Is Empty: " << isEmpty;  // 输出:Is Empty: false
    
    
文章来源:https://blog.csdn.net/qq_36091214/article/details/135611878
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。