(5)Qt—ui常用类
目录
1. QString 字符串类*
2. 容器类
2.1 顺序容器 QList
1. QString 字符串类*
QString是Qt中的字符串类,与C和C++不同的是,Qt的字符串使用Unicode编码。每一个字符使用一个16位的QChar,而不是之前8位的char,所以Qt处理中文没有问题,并且每个中文算作一个字符。
Qt是基于C++的开发框架,因此很多类会尽可能地兼容C++的API,QString支持绝大多数std::string的API,例如append、size、length、at、push_back等。除此之外,也有修改和新增的部分。
对于QString类的API,可以通过认识常用的英文单词查询文档使用。
dialog.cpp
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
// 支持多国语言
QString text = "αβγあいうえおАБВ";
qDebug() << text;
qDebug() << text.size(); //字符串长度法1
qDebug() << text.length(); //字符串长度法2
qDebug() << text.count(); //字符串长度法3
// int → QString
// 参数1:要转换的数字
// 参数2:进制,默认为十进制
text = QString::number(11,16);
qDebug() << text;
// int → QString
// 参数1:要转换的数字
// 参数2:进制,默认为十进制
// 返回值:QString& ,因此支持链式调用
text.setNum(10,16).append("哈哈哈");
qDebug() << text;
// QString → int
// int toInt(bool * ok = 0, int base = 10) const
// 参数1:表示转换是否成功
// 参数2:进制,默认为十进制
// 返回值:转换的结果,0表示失败
text = "0";
bool result; // 转换是否成功
int i = text.toInt(&result);
qDebug() << "是否成功:" << result;
qDebug() << i;
}
Dialog::~Dialog()
{
}
2. 容器类
C++的STL容器类已经不适用于Qt的环境,因为Qt重新实现了部分容器类,据官方所说,Qt的容器类更加轻巧、安全和易于使用。Qt对这些容器类进行存储优化,可以使生成的exe可执行文件的体积减小,这些容器类是线程安全的,支持同时被多个线程进行只读访问,几乎支持C++的STL容器类的API,并在此基础上进行了扩充。
2.1 顺序容器 QList
先创建一个自定义的C++类,然后使用QList存储这个类的对象。
在Qt中创建一个自定义的C++类的操作步骤如下:
1. 在Qt Creator中选中项目名称,鼠标右键,点击“添加新文件”。
2. 在弹出的窗口中,按照下图所示进行操作。
3. 在弹出的窗口中,先给类命名(主题使用大驼峰命名法,即所有单词的首字母大写),然后点击“下一步”。
4. 在项目管理界面直接点击完成。可以看到在项目中已经有对应的头文件和源文件了。
QList除了支持C++的迭代器以外,还支持Java的迭代器,对应关系如下。
C++迭代器 | 等效的Java迭代器 |
QList<T>::const_iterator | QListIterator<T> |
QList<T>::iterator | QMutableListIterator<T> |
QStringList类基本等同于QList<QString>
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
//头文件
#include <QList>
#include "student.h"
#include <QDebug>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
};
#endif // DIALOG_H
student.h
#ifndef STUDENT_H
#define STUDENT_H
//引入头文件
#include <QString>
class Student
{
public:
Student(QString,int,QString);
QString getName() const;
void setName(const QString &value);
int getAge() const;
void setAge(int value);
QString getMajor() const;
void setMajor(const QString &value);
private:
QString name;
int age;
QString major;
};
#endif // STUDENT_H
dialog.cpp
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
//创建一个QList对象
QList<Student> class23021;
Student s1("张三",23,"电子信息科学与技术");
Student s2("李四",25,"自动化");
Student s3("王五",18,"计算机科学");
Student s4("赵六",24,"物联网");
Student s5("徐七",23,"电子信息工程");
Student s6("孙八",18,"计算机科学");
//增加元素
class23021.push_back(s1); //向后追加
class23021.append(s2); //向后追加
class23021.push_front(s3); //向前追加
class23021 <<s1 <<s2 <<s3; //连续追加
class23021.insert(1,s4); //在第二个位置插入 //参数1:位置 //参数2:元素值
//删除元素
class23021.pop_back(); //删除最后一个元素,同removeLast
class23021.pop_front(); //删除第一个元素,同removeFirst
//class23021.erase();
class23021.removeAt(1); //删除第n个元素
//int removeAll(const T & value) 删除所有相同的元素
//bool QList::removeOne(const T & value) 删除第一个相同元素
//更新元素
class23021[1] = s5;
//更新元素
//参数1:元素位置
//参数2:更新的数组
class23021.replace(0,s6);
//遍历
for(int i = 0;i<class23021.count();i++){
Student s = class23021.at(i); //更高效
qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
}
qDebug()<<"*********************************";
//C++ STL迭代器
for(QList<Student>::const_iterator iter = class23021.begin();iter !=class23021.end();iter++){
Student s = *iter;
qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
}
qDebug()<<"*********************************";
//Java迭代器构造函数,参数为容器对象
QListIterator<Student> iter(class23021);
while(iter.hasNext()){ //判断后续有无有效元素
//向后移动并取出
Student s = iter.next();
qDebug()<<s.getName()<<s.getAge()<<s.getMajor();
}
}
Dialog::~Dialog()
{
}
main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return 0;
}
student.cpp
#include "student.h"
Student::Student(QString name,int age,QString major):name(name),age(age)
{
this->major = major;
}
QString Student::getName() const
{
return name;
}
void Student::setName(const QString &value)
{
name = value;
}
int Student::getAge() const
{
return age;
}
void Student::setAge(int value)
{
age = value;
}
QString Student::getMajor() const
{
return major;
}
void Student::setMajor(const QString &value)
{
major = value;
}
运行结果: