【Qt学习】基本类型、日志输出、字符串、QVariant
文章目录基本数据类型日志输出Qt Creator中看日志单独控制台看日志字符串类型示例字符串拼接字符串长度QVariant示例变量相加自定义类型前文回顾【Qt学习】Windows上环境配置与项目初识【Qt学习】三个窗口类、坐标系、内存回收基本数据类型Qt基本数据类型定义在#include QtGlobal中可以在帮助文档搜索QtGlobal知道就行不常用。此外还有一些Qt的函数、宏。日志输出c使用printfc使用coutqt中使用QDebug。引入头文件QDebug使用qDebug()函数返回一个默认的QDebug对象。Qt Creator中看日志此时只有在Qt Creator中启动程序时才能看到日志。单独只打开exe是看不到的 。QDebug自带换行所以后面不用添加std::endl如果要添加更多换行则使用 \n。单独控制台看日志为了打开exe也能看到需要在pro文件中添加console然后重新构建此时启动会自动打开一个控制台里面可以看到日志直接打开Debug目录下的exe也会自动打开一个控制台来输出日志。字符串类型有两个主要的QByteArray和QString略看帮助文档。简单来说QByteArray存字节QString存文本Unicode设计两个类是为了区分二进制数据和文本数据。示例字符串拼接QString字符串拼接示例QString strQString((%1)有(%2)个徒弟分别是(%3),(%4),(%5)。).arg(唐僧).arg(3).arg(孙悟空).arg(猪八戒).arg(沙僧);qDebug()str\n;qDebug()str;字符串长度length()和count()和size()是等价的。QString str1我很帅123;QByteArray str2我很帅123;qDebug()QString length str1.length();//6qDebug()QByteArray length str2.length();//12QString的长度是按照字符数来数一个中文长度为1.内部用的utf-16编码用多字节表示字符QByteArray的长度是按照字节数来数一个中文占3个字节英文和数字占1个字节。内部对char*进行了浅层包装QVariantQVariant是一个通用容器类作用是在一个变量里存储多种不同类型的数据并在需要时进行安全的类型转换和读取。示例变量相加#includemainwindow.h#includeui_mainwindow.h#includeQtDebugMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui-setupUi(this);intvaluedataPlus(1,2).toInt();QString strdataPlus(ABC,你好).toString();qDebug()value;//3qDebug()str;//ABC你好}MainWindow::~MainWindow(){deleteui;}QVariantMainWindow::dataPlus(QVariant a,QVariant b){QVariant c;if(a.type()QVariant::Intb.type()QVariant::Int){cQVariant(a.toInt()b.toInt());}elseif(a.type()QVariant::Stringb.type()QVariant::String){//方式1构造函数方式// c QVariant(a.toString() b.toString());//方式2赋值函数方式c.setValue(a.toString()b.toString());}else{//简单演示这边不写}returnc;}自定义类型在MainWindow头文件中自定义类型//自定义一个类型structPerson{intid;QString name;};//使用宏将该类型变成QVariant可以识别的类型Q_DECLARE_METATYPE(Person);在MainWindow源文件中写调用示例#includemainwindow.h#includeui_mainwindow.h#includeQtDebugMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui-setupUi(this);//创建Person对象Person p;p.id100;p.nameKen;#if0//方式1QVariant v;v.setValue(p);#else//方式2QVariant vQVariant::fromValue(p);#endif//去除v中的数据if(v.canConvertPerson()){Person tmpv.valuePerson();qDebug()tmp.id;qDebug()tmp.name;}}MainWindow::~MainWindow(){deleteui;}