- 2.2 字符串与输入输出组件
- 2.2.1 字符串与数值之间的转换
- 2.2.2 QString的常用功能
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