目录
2.1字符串类
2.1.1字符串的一般操作
1.字符串拼接
2.字符串查询
3.字符串截取
4.字符串存储相关函数
5.字符串转换和修改
2.1.2字符串与数值的转换
1.字符串转换为整数
2.字符串转换为浮点型
3.函数 setNum()
4.函数 arg()
2.2容器类
2.3控件
例子:创建具有复选框的树形控件。
参考:
QString 是 Qt 中的一个类,用于存储字符串,QString 没有父类。QString 存储的是一串字符,每个字符是一个 QChar 类型的数据。
QString 类定义了大量的接口函数用于字符串操作。QString在 Qt 类库中应用非常广泛,很多函数的参数是 QString 类型。QString 使用隐式共享减少内存占用,也就是只有在修改一个字符串的时候,这个字符串才会被复制。
使用加号运算符可以直接将两个 QString 字符串拼接为一个字符串。
QString str1 = "你是",str2 = "谁?";
QString str3 = str1 + str2; //你是谁?
QString str4 = str2 + str1; //谁?你是
addend()函数实现在一个字符串末尾追加另一个字符串,
prepend()函数在原字符串的开头插入另一个字符串,
insert()函数在原字符串特定的位置插入另一个字符串。
QString str1 = "猜猜";
QString str2 = "我是谁";
QString str3 = "Hello ";
str1.append(str2);
str1.append("__皮卡丘。");
str1.prepend(str3);
qDebug()<
//运行结果
"Hello 猜猜我是谁__皮卡丘。"
"Hello 猜猜我是谁__I am皮卡丘。"
QString::startsWith()函数判断一个字符串是否以某个字符串开头。
QString::endsWith()函数判断一个字符串是否以某个字符串结尾。
QString::contains()函数判断一个指定的字符串是否出现过。
bool ret;
QString str = "Welcome to you!";
ret = str.startsWith("Welcome",Qt::CaseSensitive);//返回true
qDebug()<
indexOf()的功能是在当前字符串内查找某个字符串首次出现的位置。
lastIndexOf()的功能则是在当前字符串内查找某个字符串最后出现的位置。
带参数的count()统计当前字符串中某个字符串出现的次数。
QString stra3 = "qt,Qt,Qt,qt,qt";
int N = stra3.count("qt");//默认区分大小写
qDebug()<
(1) 函数 front()和 back()。函数 front()返回字符串中的第一个字符,相当于 at(0);函数 back() 返回字符串中的最后一个字符。
QString str = "Hi,吃了吗";
QChar ch1 = str.front();//ch1 = 'H'
QChar ch2 = str.back();//ch2 = '吗'
(2) 函数 left()和 right()。函数 left()从字符串中提取左边 n 个字符,函数 right()从字符串中提取右边 n 个字符,n 为设定参数。
QString str4 = "It's been quite a journey this year, "
"full of surprises and unexpected events. "
"Let's leave the past behind and move on.";
QString str5 = str4.left(3);
qDebug()<
(3) 函数 mid()。函数 mid()用于返回字符串中的部分字符串,其函数原型定义如下:
QString QString::mid(qsizetype pos, qsizetype n = -1)
pos 是起始位置,n 是返回字符串中的字符个数。如果不指定参数 n,就返回从 pos 开始到 末尾的字符串,如果 pos+n 超过了字符串的边界,返回的字符串就为 null。
QString str6 = "E://Qt5_deve_exam//test";
int N = str6.lastIndexOf("//"); //获取最后一个"//"出现的位置
QString str61 = str6.mid(N);
qDebug()<
(4) 函数 section()。函数 section()的原型定义如下:
QString QString::section(const QString &sep, qsizetype start, qsizetype end = -1,
QString::SectionFlags flags = SectionDefault)
其功能是从字符串中提取以 sep 作为分隔符,从 start 段到 end 段的字符串,例如:
QString str71,str7 = "既然你诚心诚意的发问了,我们就大发慈悲的告诉你!为了防止世界被破坏,"
"为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色。";
str71 = str7.section(",",0,0);
qDebug()<
(1) isEmpty()和isNull()。这两个函数都会判断字符串是否为空,但是稍有差别。如果是一个空字符串,也就是只有“\0”,则 isNull()返回 false,而 isEmpty()返回 true。只有未被赋值时, isNull()才返回 true。
QString str81,str8 = "";
bool b = true;
b = str81.isEmpty();//b = true
b = str81.isNull();//b = true
b = str8.isEmpty();//b = true
b = str8.isEmpty();//b = false
一个NULL字符串一定是一个空字符串,一个空字符串未必是一个NULL字符串。
(2) count()、size()和 length()。函数 size()和 length()都返回字符串中的字符个数,它们的功能相同。不带有任何参数的函数 count()与这两个函数功能相同,此外,count()还有带参数的形式,可统计某个字符串在当前字符串中出现的次数。
QString str9 = "你好";
QString str10 = "Hello";
int N = str9.count();
qDebug()<
(3) 函数 clear()清空当前字符串,使字符串为 null。
QString stra1 = "";
bool b = stra1.isNull();//b = false,字符串以被赋值,不为NULL
b = stra1.isEmpty();//b = true
stra1.clear();
b = stra1.isNull();//b = true ,clear清空了字符串,为NULL
(4) 函数 resize()改变字符串长度。
(5) 函数 fill() 将字符串中的每个字符都用一个新字符替换,且可以改变字符串长度。
QString stra2 = "hello";
stra2.fill('x');
qDebug()<
(1) 函数 toUpper()将字符串内的字母全部转换为大写字母, toLower()将字符串内的字母全部转换为小写字母。
(2) 函数 trimmed()会去掉字符串首尾的空格,函数 simplified() 不仅会去掉字符串首尾的空格,还会将中间连续的空格用单个空格替换。
QString strb1 = " I'am ok ";
qDebug()<
(3) 函数 chop()去掉字符串末尾的 n 个字符, n 是输入参数。如果 n大于或等于字符串实际长度, 字符串内容就变为空。
int toInt(bool *ok = nullptr, int base = 10)
uint toUInt(bool *ok = nullptr, int base = 10)
long toLong(bool *ok = nullptr, int base = 10)
ulong toULong(bool *ok = nullptr, int base = 10)
short toShort(bool *ok = nullptr, int base = 10)
ushort toUShort(bool *ok = nullptr, int base = 10)
qlonglong toLongLong(bool *ok = nullptr, int base = 10)
qulonglong toULongLong(bool *ok = nullptr, int base = 10)
这几个函数的输入参数都一样。变量 ok 如果不为 null, 就作为转换结果是否成功的返回变量, false 表示转换失败, true 表示转换成功。变量 base 表示使用的进制, 默认值为 10, 也就是十进制。base 可以设置为 2~36,常用的是二进制、八进制、十六进制; base 还可以设置为 0,表示使用 C 语言的表示法,字符串以“0x”开头就是十六进制的,否则就是十进制的。
float toFloat(bool *ok = nullptr)
double toDouble(bool *ok = nullptr)
用于将整数或浮点数转换为字符串。
函数 arg()用于格式化输出各种数据的字符串, 使用起来更灵活。
int age = 20;
QString book = "Qt";
QString str = QString("我今年%1岁,喜欢读%2的书。").arg(age).arg(book);
qDebug()<
省略
运行结果如下:
widget.h文件:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public:
void init(); //初始化
void updataPatentItem(QTreeWidgetItem* item);//更新父类条款
public slots:
void treeItemChanged(QTreeWidgetItem* item, int column);//树控件条款改变的槽函数
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
init();//先初始化
//ui界面的treeWidget部件发送条款改变的信号,窗口接受信号并运行函数treeItemChanged(QTreeWidgetItem*,int)
connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),
this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));
}
Widget::~Widget()
{
delete ui;
}
/* 初始化 */
void Widget::init()
{
ui->treeWidget->clear();//通过删除树形小部件的所有项和选择来清除其小部件。
//第一组
// ui设计里Tree Widget 的ObjectName是treeWidget
/*
创建parent
第一步:创建一个新的QTreeWidgetItem部件group1,放在ui->treeWidget里
第二步:设置group1的文本是“group1”
第三步:设置group1的标志:用户可以选中或取消选中|它可以被编辑|可以选择
第四步:将给定列检查状态中的项设置为未选中状态。
*/
QTreeWidgetItem * group1 = new QTreeWidgetItem(ui->treeWidget);
group1->setText(0,"group1");
group1->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
group1->setCheckState(0,Qt::Unchecked);
/*
创建child
第一步:创建一个新的QTreeWidgetItem部件subItem11,放在group1里
第二步:设置subItem11的文本是“subItem11”
第三步:设置subItem11的标志:用户可以选中或取消选中|它可以被编辑|可以选择
第四步:将给定列检查状态中的项设置为未选中状态。
*/
QTreeWidgetItem * subItem11 = new QTreeWidgetItem(group1);
subItem11->setText(0,"subItem11");
subItem11->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
subItem11->setCheckState(0,Qt::Unchecked);
QTreeWidgetItem * subItem12 = new QTreeWidgetItem(group1);
subItem12->setText(0,"subItem12");
subItem12->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
subItem12->setCheckState(0,Qt::Unchecked);
//第二组
QTreeWidgetItem * group2 = new QTreeWidgetItem(ui->treeWidget);
group2->setText(0,"group2");
group2->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
group2->setCheckState(0,Qt::Unchecked);
QTreeWidgetItem * subItem21 = new QTreeWidgetItem(group2);
subItem21->setText(0,"subItem21");
subItem21->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
subItem21->setCheckState(0, Qt::Unchecked);
QTreeWidgetItem * subItem22 = new QTreeWidgetItem(group2);
subItem22->setText(0,"subItem22");
subItem22->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
subItem22->setCheckState(0, Qt::Unchecked);
QTreeWidgetItem * subItem23 = new QTreeWidgetItem(group2);
subItem23->setText(0,"subItem23");
subItem23->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
subItem23->setCheckState(0, Qt::Unchecked);
}
/* 更新父项 */
void Widget::updataPatentItem(QTreeWidgetItem *item)
{
QTreeWidgetItem * parent = item->parent();//定义一个QTreeWidgetItem对象parent 作为 该项目的父项
if(parent == NULL){//如果parent 空 则返回
return;
}
int selectedCount = 0;//子项选中的数量
int childCount = parent->childCount();//子项的总数量
for(int i = 0; ichild(i);//定义一个QTreeWidgetItem对象childItem 作为
//父项的第i个子项
if(childItem->checkState(0) == Qt::Checked){//如果子项的状态是选中的
selectedCount++;//子项选中的数量 + 1
}
}
if(selectedCount <= 0){
//未选中
parent->setCheckState(0,Qt::Unchecked);
}else if(selectedCount > 0 && selectedCount < childCount){
//部分选中
parent->setCheckState(0,Qt::PartiallyChecked);
}else if(selectedCount == childCount){
//全选中
parent->setCheckState(0, Qt::Checked);
}
}
/* 树项目改变 */
void Widget::treeItemChanged(QTreeWidgetItem *item, int column)
{
QString itemText = item->text(0);//定义一个QString对象itemText 作为 项目指定列中的文本。
//group1 or 2选中时
if(Qt::Checked == item->checkState(0)){
QTreeWidgetItem * parent = item->parent();//定义一个QTreeWidgetItem对象parent 作为 该项目的父项
int count = item->childCount();//子项的总数量
if(count > 0){
for(int i = 0 ; ichild(i)->setCheckState(0,Qt::Checked);
}
}else{
updataPatentItem(item);
}
}else if(Qt::Unchecked == item->checkState(0)){//group1 or 2未选中
int count = item->childCount();
if(count > 0){
for(int i = 0; ichild(i)->setCheckState(0,Qt::Unchecked);
}
}else{
updataPatentItem(item);
}
}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pxxzhk/article/details/133591597