文章目录
- 基本数据类型
- 日志输出
- Qt Creator中看日志
- 单独控制台看日志
- 字符串类型
- 示例
- 字符串拼接
- 字符串长度
- QVariant
- 示例
- 变量相加
- 自定义类型
前文回顾:
【Qt学习】Windows上环境配置与项目初识
【Qt学习】三个窗口类、坐标系、内存回收
基本数据类型
Qt基本数据类型定义在#include <QtGlobal>中,可以在帮助文档搜索QtGlobal:
知道就行,不常用。
此外还有一些Qt的函数、宏。
日志输出
c使用printf,c++使用cout,qt中使用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 str=QString("(%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();//12- QString的长度是按照字符数来数,一个中文长度为1.(内部用的utf-16编码,用多字节表示字符)
- QByteArray的长度是按照字节数来数,一个中文占3个字节,英文和数字占1个字节。(内部对char*进行了浅层包装)
QVariant
QVariant是一个通用容器类,作用是在一个变量里存储多种不同类型的数据,并在需要时进行安全的类型转换和读取。
示例
变量相加
#include"mainwindow.h"#include"ui_mainwindow.h"#include<QtDebug>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);intvalue=dataPlus(1,2).toInt();QString str=dataPlus("ABC","你好").toString();qDebug()<<value;//3qDebug()<<str;//"ABC你好"}MainWindow::~MainWindow(){deleteui;}QVariantMainWindow::dataPlus(QVariant a,QVariant b){QVariant c;if(a.type()==QVariant::Int&&b.type()==QVariant::Int){c=QVariant(a.toInt()+b.toInt());}elseif(a.type()==QVariant::String&&b.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源文件中写调用示例:
#include"mainwindow.h"#include"ui_mainwindow.h"#include<QtDebug>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);//创建Person对象Person p;p.id=100;p.name="Ken";#if0//方式1QVariant v;v.setValue(p);#else//方式2QVariant v=QVariant::fromValue(p);#endif//去除v中的数据if(v.canConvert<Person>()){Person tmp=v.value<Person>();qDebug()<<tmp.id;qDebug()<<tmp.name;}}MainWindow::~MainWindow(){deleteui;}