文章目录
- 点直线
- 时间相关的类
qt里面打印log或者打印东西,自带打印函数qDebug
里面<<插入操作符可以写任意类型
qDebug()<<"im ssss"<<520; //默认给你带换行
//也能加endl,那就多换一行
并不是说printf或者cout就不能用了,只要引入对应头文件就行。
qt里面有自己一套api和c/c++的api都是对应通用的
#include<iostream>
using namespace std;
#include "stdio.h"
cout<<"nihao"<<endl;
printf("sadasd\n");
qt里面的QByteArray类型就是c的字符数组char*套一层壳子
QString就是给字符串套层壳子,他是QByteArray的更深一层封装
反正就是字符串的意思。QByteArray和QString基本差不多
就当STL的string用就行
#include <QDebug>
#include <QByteArray>
#include <QString>
QByteArray ab="=QByteArray()";
qDebug()<<ab;
qDebug()<<ab.size();
for(auto x:ab)
{
qDebug()<<x;
}
QString as="hello QString";
qDebug()<<as;
for(auto it=ab.begin();it!=ab.end();++it)
{
qDebug()<<*it;
}
qt的这些类型能互相转换,也能转换为标准c++的string,反正api用到去查就行
QVariant类,这个类型充当着最常见的数据类型的联合,提供大量的api可以进行类型的转换
// 使用设置函数也可以将支持的类型的数据设置到QVariant对象中
// 这里的 T 类型, 就是QVariant支持的类型
void QVariant::setValue(const T &value);
// 该函数行为和 setValue() 函数完全相同
[static] QVariant QVariant::fromValue(const T &value);
// 例子:
#if 1
QVariant v;
v.setValue(5);
#else
QVariant v = QVariant::fromValue(5);
#endif
int i = v.toInt(); // i is now 5
QString s = v.toString(); // s is now "5"
做到多个重载函数或者模板的效果:
QVariant MainWindow::add_data(QVariant a,QVariant b)
{
QVariant res;
if(a.type()==QVariant::Int&&b.type()==QVariant::Int)
{
res=a.toInt()+b.toInt();
}
else if(a.type()==QVariant::String&&b.type()==QVariant::String)
{
res.setValue(a.toString()+b.toString());
}
return res;
}
int main()
{
QApplication a(argc, argv); //创建了一个应用程序的对象,只有一个
MainWindow w; //创建了一个窗口对象
int v1=w.add_data(10,20).toInt();//c++类型做了 隐士转换
qDebug()<<v1;
QString v2=w.add_data("hi","llo").toString();
qDebug()<<v2;
w.show(); //显示窗口
return a.exec(); //阻塞函数,程序进入了事件循环
}
这样通过QVariant来做类型转换,但我感觉还不如写模板
点直线
QLine line(QPoint(100,200),QPoint(200,300));
QLine newline=line.translated(20,50);
qDebug()<<"前:"<<line;
qDebug()<<"后:"<<newline;
if(line==newline){
qDebug()<<"一样";
}
else{
qDebug()<<"不一样";
}
在 QT 中 QSize 类用来形容长度和宽度
// 构造函数
// 构造空对象, 对象中的宽和高都是无效的
QSize::QSize();
// 使用宽和高构造一个有效对象
QSize::QSize(int width, int height);
// 设置宽度
void QSize::setWidth(int width)
// 设置高度
void QSize::setHeight(int height);
// 得到宽度
int QSize::width() const;
// 得到宽度的引用
int &QSize::rwidth();
// 得到高度
int QSize::height() const;
// 得到高度的引用
int &QSize::rheight();
// 交换高度和宽度的值
void QSize::transpose();
// 交换高度和宽度的值, 返回交换之后的尺寸信息
QSize QSize::transposed() const;
// 进行算法运算: 加减乘除
QSize &QSize::operator*=(qreal factor);
QSize &QSize::operator+=(const QSize &size);
QSize &QSize::operator-=(const QSize &size);
QSize &QSize::operator/=(qreal divisor);
QRect矩形类,他集合了前面的坐标和尺寸
// 构造函数
// 构造一个空对象
QRect::QRect();
// 基于左上角坐标, 和右下角坐标构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight);
// 基于左上角坐标, 和 宽度, 高度构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QSize &size);
// 通过 左上角坐标(x, y), 和 矩形尺寸(width, height) 构造一个矩形对象
QRect::QRect(int x, int y, int width, int height);
// 设置矩形的尺寸信息, 左上角坐标不变
void QRect::setSize(const QSize &size);
// 设置矩形左上角坐标为(x,y), 大小为(width, height)
void QRect::setRect(int x, int y, int width, int height);
// 设置矩形宽度
void QRect::setWidth(int width);
// 设置矩形高度
void QRect::setHeight(int height);
// 返回值矩形左上角坐标
QPoint QRect::topLeft() const;
// 返回矩形右上角坐标
// 该坐标点值为: QPoint(left() + width() -1, top())
QPoint QRect::topRight() const;
// 返回矩形左下角坐标
// 该坐标点值为: QPoint(left(), top() + height() - 1)
QPoint QRect::bottomLeft() const;
// 返回矩形右下角坐标
// 该坐标点值为: QPoint(left() + width() -1, top() + height() - 1)
QPoint QRect::bottomRight() const;
// 返回矩形中心点坐标
QPoint QRect::center() const;
// 返回矩形上边缘y轴坐标
int QRect::top() const;
int QRect::y() const;
// 返回值矩形下边缘y轴坐标
int QRect::bottom() const;
// 返回矩形左边缘 x轴坐标
int QRect::x() const;
int QRect::left() const;
// 返回矩形右边缘x轴坐标
int QRect::right() const;
// 返回矩形的高度
int QRect::width() const;
// 返回矩形的宽度
int QRect::height() const;
// 返回矩形的尺寸信息
QSize QRect::size() const;
举个demo:
QRect qq(5,5,10,30);
QPoint p=qq.bottomLeft();
qDebug()<<"后:"<<p;
int mly=qq.y();
qDebug()<<"y:"<<mly;
时间相关的类
QDate日期 ,第二种写法里面就是format格式化,查帮助文档看看有很多的
//获取当前日期
QDate qd=QDate::currentDate();
//1
qDebug()<<"年:"<<qd.year()<<"月:"<<qd.month()<<"日:"<<qd.day();
//2
QString str=qd.toString("yyyy-MMMM-dddd-dd");
qDebug()<<"date:"<<str;
QTime时间封装到毫秒
QTime time(20,12,24);//h m s ms
QTime t;
t=time.addSecs(60);
t=time.addMSecs(1000); //毫秒和秒是1000进制
QString arr=t.toString("h:m:s:zzz");
qDebug()<<"time:"<<arr;
QDateTime类就是上面俩结合体,就跟上面矩阵类一样
// 构造函数
QDateTime::QDateTime();
QDateTime::QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime);
// 公共成员函数
// 设置日期
void QDateTime::setDate(const QDate &date);
// 设置时间
void QDateTime::setTime(const QTime &time);
// 给当前日期对象追加 年/月/日/秒/毫秒, 参数可以是负数
QDateTime QDateTime::addYears(int nyears) const;
QDateTime QDateTime::addMonths(int nmonths) const;
QDateTime QDateTime::addDays(qint64 ndays) const;
QDateTime QDateTime::addSecs(qint64 s) const;
QDateTime QDateTime::addMSecs(qint64 msecs) const;
// 得到对象中的日期
QDate QDateTime::date() const;
// 得到对象中的时间
QTime QDateTime::time() const;
// 日期和时间格式, 格式字符参考QDate 和 QTime 类的 toString() 函数
QString QDateTime::toString(const QString &format) const;
// 操作符重载 ==> 日期时间对象的比较
bool QDateTime::operator!=(const QDateTime &other) const;
bool QDateTime::operator<(const QDateTime &other) const;
bool QDateTime::operator<=(const QDateTime &other) const;
bool QDateTime::operator==(const QDateTime &other) const;
bool QDateTime::operator>(const QDateTime &other) const;
bool QDateTime::operator>=(const QDateTime &other) const;
// 静态函数
// 得到当前时区的日期和时间(本地设置的时区对应的日期和时间)
[static] QDateTime QDateTime::currentDateTime();
举个例子:
QDateTime dta(QDate::currentDate(),QTime::currentTime());
QString ptr=dta.toString("yyyy/MM/dddd/dd----ap:HH:mm:ss:zzz");
qDebug()<<"date-time:"<<ptr;