【Qt】Qt常见的数据类型
思维导图
学习目标
一、基础类型
因为Qt是一个C++的框架,因此C++的语法和数据类型在Qt中都是被支持的,但是Qt中也是定义了一些属于自己的数据类型,不过,好多数据类型都是对C++的数据类型进行封装,下面来简要介绍一下这些基础的数据类型:
Qt的基本数据类型定义在 #include <QtGlobal> 中,Qt的基本数据类型有:
虽然,在Qt中有属于自己的整形或者浮点型,但是在编程过程中,这些数据类型基本不使用,常用的关键字是C/C++中的int,float,double等。
二、Log输出
2.1 在调试窗口中输入日志
在Qt中进行log输出,一般不使用C中的printf,也不是使用C++中的cout,Qt框架提供了专门用于日志输出的类,头文件名为QDebug,使用方法如下:
// 包含QDebug的头文件
#include <QDebug>// 直接通过全局函数qDebug(),就可以进行日志输出
qDebug() << "date:" << QDate::currentDate();
qDebug() << "Types:" << QString("String") << QChar('x') << QRect(0, 10, 50, 40);
扩展一下,在Qt中,和全局函数qDebug()类似的日志函数还有:qWarning(),qInfo() ,qCritical()
int number = 100;
float i = 11.11;qWarning() << "Number:" << number << "Bther value:" << i;
qInfo() << "Number:" << number << "Bther value:" << i;
qCritical() << "Number:" << number << "Bther value:" << i;
2.2 在终端窗口中输出日志
使用2.1的方法只能在项目调试过程中进行日志的输出,如果不是通过IDE进行程序调试,而是直接执行可执行程序,在这种情况下,是没有日志输出窗口的,因此,看不到任何日志输出。
默认情况下,日志信息是不会打印到终端窗口的,如果想要实现这样的效果,必须在项目文件中添加相关的属性信息。
操作如下:打开项目文件(*.pro)找到配置项 config,添加 console 控制台属性
三、字符串类型
在Qt中,不仅支持C,C++中的字符串类型,而且还在框架中定义了专属的字符串类型,我们必须要掌握在Qt中关于这些类型的使用和相互之间的转换。
语言类型 | 字符串类型 |
C | char* |
C++ | std::string,char* |
Qt | QByteArray,QString等 |
3.1 QByteArray
在Qt中,QByteArray可以看做是C语言中char*的升级版本。我们在使用这种类型的时候,可以通过这个类的构造函申请一块内存空间,用于存储我们需要处理的字符串数据。
下面,我们来看一看这个类中常用的一些API函数:
// 构造函数// 1.构造空对象,里面没有数据
QByteArray::QByteArray();// 2.将data中的size个字符进行构造,得到一个字节数组对象
// 如果size = -1, 函数内部自动计算字符串长度,计算方式为:strlen(data)
QByteArray::QByteArray(const char* data, int size = -1);// 3.构造一个长度为size个字节,并且每一个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);
// 尾部追加数据
QString &QString::append(const QString &str);
QString &QString::append(const char *str);
QString &QString::append(const QByteArray &ba);
void QString::push_back(const QString &other);
// 头部添加函数
QString &QString::prepend(const QString &str);
QString &QString::prepend(const char *str);
QString &QString::prepend(const QByteArray &ba);
void QString::push_front(const QString &other);
// 插入数据,将ba插入带数组第i个字节的位置(从0开始)
QByteArray &QByteArray::insert(int i, const QByteArray &ba);
// 删除数据
// 从大字符串中删除len字符,从第pos个字符的位置开始删除
QByteArray &QByteArray::remove(int pos, int len)
// 从字符数组的尾部删除n个字节
void QByteArray::chop(int n)
// 从字节数组的pos位置将数组阶段(前面的部分留下,后边部分被删除)
void QByteArray::truncate(int pos)
// 将对象中的数据清空,使其为NULL
void QByteArray::clear();
// 字符串替换
// 将字节数组中的子字符串 before 替换为 after
// 其他重载函数的同名函数可以参考Qt帮助文档
QByteArray& QByteArray::replace(const QByteArray& before, const QByteArray& after);
// 判断字节数组中是否包含子字符串 ba, 包含返回 true, 否则返回 false
bool QByteArray::contains(const QByteArray& ba) const;
bool QByteArray::contains(const char* ba) const;// 判断字节数组中是否包含子字符 ch, 包含返回 true, 否则返回 false
bool QByteArray::contains(char ch) const;// 判断字节数组是否以字符串 ba 开始,是返回 true, 不是则返回 false
bool QByteArray::startsWith(const QByteArray& ba) const;
bool QByteArray::startsWith(const char* ba) const;// 判断字节数组是否以字符 ch 开始的,是返回 true, 不是返回 false
bool QByteArray::startsWith(char ch) const;// 判断字节数组是否以字符串 ba 结尾,是返回 true, 不是返回false
bool QByteArray::endWith(const QByteArray& ba) const;
bool QByteArray::endWith(const char* ba) const;// 判断字节数组是否以字符ch结尾,是返回 true, 不是返回 false
bool QByteArray::endWith(const char ch) const;
// 使用迭代器
iterator QByteArray::begin();
iterator QByteArray::end();// 使用数的方式进行遍历
// i的取值范围 0 <= i < size()
char QByteArray::at(int i) const;
char QByteArray::operator[](int i) const;
// 返回字节数组对象中字符的个数
int QByteArray::length() const;
int QByteArray::size() const;
int QByteArray::count() const;// 返回字节数组对象中字符串 ba 出现的次数
int QByteArray::count(const QByteArray& ba) const;
int QByteArray::count(const char* ba) const;// 返回字节数组对象中字符串 ch 出现的次数
int QByteArray::count(char ch) const;
3.2 QString
QString 也是封装了字符串,但是内部的编码为 utf-8,utf-8属于Unicode字符集,它固定使用多个字节(windows为2字节,Linux为3个字节)来表示一个字符,这样就可以将世界上几乎所有语言的常用字符收录在其中。
下面是常用的API:
3.3 两者之间的区别
四、QVariant
QVariant这个类很神奇,或者是很方便的,在很多时候,需要几种不同的数据类型需要传递,如果使用结构体,不是很方便,容器保存的也只是一种数据类型,而QVariant可以存储多个类型。
QVariant这个类型充当着很常见的数据类型的联合。QVariant可以保存很多Qt的数据类型,包括
QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、 QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还有C++的基本类型,比如int,float等。
4.1 标准类型
将标准数据类型转换为QVariant类型
4.2 自定义类型
除了标准类型,我们自定义的类型也可以使用QVariant类进行封装,被QVariant存储的数据类型需要有一个默认的构造函数和一个拷贝构造函数。为了实现这一个功能,首先必须使用Q_DECLARE_METATYPE()宏。通常会将这个宏放在类的声明所在头文件的下面,原型为:Q_DECLARE_METATYPE(type)。
使用的具体步骤如下:
第一步:在头文件中声明:
// *.h
struct MyTest
{int id;QString name;
};
// 自定义类型注册
Q_DECLARE_METATYPE(MyTest)
第二步:在源文件中定义:
MyTest t;
t.name = "张三丰";
t.num = 666;
// 值的封装
QVariant vt = QVariant::fromValue(t);// 值的读取
if(vt.canConvert<MyTest>())
{MyTest t = vt.value<MyTest>();qDebug() << "name: " << t.name << ", num: " << t.num;
}
以上操作用到的QVariant类的API如下:
// 如果当前QVariant对象可用转换为对应的模板类型 T, 返回true, 否则返回false
bool QVariant::canConvert() const;
// 将当前QVariant对象转换为实际的 T 类型
T QVariant::value() const;
五、位置和尺寸
在QT中我们常见的 点, 线, 尺寸, 矩形 都被进行了封装, 下边依次为大家介绍相关的类。
5.1 QPoint
QPoint
类封装了我们常用用到的坐标点 (x, y), 常用的 API如下:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // 构造函数 // 构造一个坐标原点, 即(0, 0) QPoint::QPoint(); // 参数为 x轴坐标, y轴坐标 QPoint::QPoint(int xpos, int ypos);// 设置x轴坐标 void QPoint::setX(int x); // 设置y轴坐标 void QPoint::setY(int y);// 得到x轴坐标 int QPoint::x() const; // 得到x轴坐标的引用 int &QPoint::rx(); // 得到y轴坐标 int QPoint::y() const; // 得到y轴坐标的引用 int &QPoint::ry();// 直接通过坐标对象进行算术运算: 加减乘除 QPoint &QPoint::operator*=(float factor); QPoint &QPoint::operator*=(double factor); QPoint &QPoint::operator*=(int factor); QPoint &QPoint::operator+=(const QPoint &point); QPoint &QPoint::operator-=(const QPoint &point); QPoint &QPoint::operator/=(qreal divisor);// 其他API请自行查询Qt帮助文档, 不要犯懒哦哦哦哦哦...... |
5.2 QLine
QLine
是一个直线类, 封装了两个坐标点 (两点确定一条直线
)常用API如下:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // 构造函数 // 构造一个空对象 QLine::QLine(); // 构造一条直线, 通过两个坐标点 QLine::QLine(const QPoint &p1, const QPoint &p2); // 从点 (x1, y1) 到 (x2, y2) QLine::QLine(int x1, int y1, int x2, int y2);// 给直线对象设置坐标点 void QLine::setPoints(const QPoint &p1, const QPoint &p2); // 起始点(x1, y1), 终点(x2, y2) void QLine::setLine(int x1, int y1, int x2, int y2); // 设置直线的起点坐标 void QLine::setP1(const QPoint &p1); // 设置直线的终点坐标 void QLine::setP2(const QPoint &p2);// 返回直线的起始点坐标 QPoint QLine::p1() const; // 返回直线的终点坐标 QPoint QLine::p2() const; // 返回值直线的中心点坐标, (p1() + p2()) / 2 QPoint QLine::center() const;// 返回值直线起点的 x 坐标 int QLine::x1() const; // 返回值直线终点的 x 坐标 int QLine::x2() const; // 返回值直线起点的 y 坐标 int QLine::y1() const; // 返回值直线终点的 y 坐标 int QLine::y2() const;// 用给定的坐标点平移这条直线 void QLine::translate(const QPoint &offset); void QLine::translate(int dx, int dy); // 用给定的坐标点平移这条直线, 返回平移之后的坐标点 QLine QLine::translated(const QPoint &offset) const; QLine QLine::translated(int dx, int dy) const;// 直线对象进行比较 bool QLine::operator!=(const QLine &line) const; bool QLine::operator==(const QLine &line) const;// 其他API请自行查询Qt帮助文档, 不要犯懒哦哦哦哦哦...... |
5.3 QSize
在QT中
QSize
类用来形容长度和宽度, 常用的API如下:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // 构造函数 // 构造空对象, 对象中的宽和高都是无效的 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);// 其他API请自行查询Qt帮助文档, 不要犯懒哦哦哦哦哦...... |
5.4 QRect
在Qt中使用
QRect
类来描述一个矩形, 常用的API如下:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // 构造函数 // 构造一个空对象 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; |
六、日期和时间
6.1 QDate
QDate
类可以封装日期信息也可以通过这个类得到日期相关的信息, 包括:年
,月
,日
。
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // 构造函数 QDate::QDate(); QDate::QDate(int y, int m, int d);// 公共成员函数 // 重新设置日期对象中的日期 bool QDate::setDate(int year, int month, int day); // 给日期对象添加 ndays 天 QDate QDate::addDays(qint64 ndays) const; // 给日期对象添加 nmonths 月 QDate QDate::addMonths(int nmonths) const; // 给日期对象添加 nyears 月 QDate QDate::addYears(int nyears) const;// 得到日期对象中的年/月/日 int QDate::year() const; int QDate::month() const; int QDate::day() const; void QDate::getDate(int *year, int *month, int *day) const;// 日期对象格式化 /*d - The day as a number without a leading zero (1 to 31)dd - The day as a number with a leading zero (01 to 31)ddd - The abbreviated localized day name (e.g. 'Mon' to 'Sun'). Uses the system locale to localize the name, i.e. QLocale::system().dddd - The long localized day name (e.g. 'Monday' to 'Sunday'). Uses the system locale to localize the name, i.e. QLocale::system().M - The month as a number without a leading zero (1 to 12)MM - The month as a number with a leading zero (01 to 12)MMM - The abbreviated localized month name (e.g. 'Jan' to 'Dec'). Uses the system locale to localize the name, i.e. QLocale::system().MMMM - The long localized month name (e.g. 'January' to 'December'). Uses the system locale to localize the name, i.e. QLocale::system().yy - The year as a two digit number (00 to 99)yyyy - The year as a four digit number. If the year is negative, a minus sign is prepended, making five characters. */ QString QDate::toString(const QString &format) const;// 操作符重载 ==> 日期比较 bool QDate::operator!=(const QDate &d) const; bool QDate::operator<(const QDate &d) const; bool QDate::operator<=(const QDate &d) const; bool QDate::operator==(const QDate &d) const; bool QDate::operator>(const QDate &d) const; bool QDate::operator>=(const QDate &d) const;// 静态函数 -> 得到本地的当前日期 [static] QDate QDate::currentDate(); |
6.2 QTime
QTime
类可以封装时间信息也可以通过这个类得到时间相关的信息, 包括:时
,分
,秒
,毫秒
。
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | // 构造函数 QTime::QTime(); /*h ==> 取值范围: 0 ~ 23m and s ==> 取值范围: 0 ~ 59ms ==> 取值范围: 0 ~ 999 */ QTime::QTime(int h, int m, int s = 0, int ms = 0);// 公共成员函数 // Returns true if the set time is valid; otherwise returns false. bool QTime::setHMS(int h, int m, int s, int ms = 0); QTime QTime::addSecs(int s) const; QTime QTime::addMSecs(int ms) const;// 示例代码QTime n(14, 0, 0); // n == 14:00:00QTime t;t = n.addSecs(70); // t == 14:01:10t = n.addSecs(-70); // t == 13:58:50t = n.addSecs(10 * 60 * 60 + 5); // t == 00:00:05t = n.addSecs(-15 * 60 * 60); // t == 23:00:00// 从时间对象中取出 时/分/秒/毫秒 // Returns the hour part (0 to 23) of the time. Returns -1 if the time is invalid. int QTime::hour() const; // Returns the minute part (0 to 59) of the time. Returns -1 if the time is invalid. int QTime::minute() const; // Returns the second part (0 to 59) of the time. Returns -1 if the time is invalid. int QTime::second() const; // Returns the millisecond part (0 to 999) of the time. Returns -1 if the time is invalid. int QTime::msec() const;// 时间格式化 /*-- 时 --h ==> The hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)hh ==> The hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)H ==> The hour without a leading zero (0 to 23, even with AM/PM display)HH ==> The hour with a leading zero (00 to 23, even with AM/PM display)-- 分 --m ==> The minute without a leading zero (0 to 59)mm ==> The minute with a leading zero (00 to 59)-- 秒 --s ==> The whole second, without any leading zero (0 to 59)ss ==> The whole second, with a leading zero where applicable (00 to 59)-- 毫秒 --zzz ==> The fractional part of the second, to millisecond precision, including trailing zeroes where applicable (000 to 999).-- 上午或者下午AP or A ==> 使用AM/PM(大写) 描述上下午, 中文系统显示汉字ap or a ==> 使用am/pm(小写) 描述上下午, 中文系统显示汉字 */ QString QTime::toString(const QString &format) const;// 阶段性计时 // 过时的API函数 // 开始计时 void QTime::start(); // 计时结束 int QTime::elapsed() const; // 重新计时 int QTime::restart();// 推荐使用的API函数 // QElapsedTimer 类 void QElapsedTimer::start(); qint64 QElapsedTimer::restart(); qint64 QElapsedTimer::elapsed() const;// 操作符重载 ==> 时间比较 bool QTime::operator!=(const QTime &t) const; bool QTime::operator<(const QTime &t) const; bool QTime::operator<=(const QTime &t) const; bool QTime::operator==(const QTime &t) const; bool QTime::operator>(const QTime &t) const; bool QTime::operator>=(const QTime &t) const;// 静态函数 -> 得到当前时间 [static] QTime QTime::currentTime(); |
6.3 QDateTime
QDateTime
类可以封装日期和时间信息也可以通过这个类得到日期和时间相关的信息, 包括:年
,月
,日
,时
,分
,秒
,毫秒
。其实这个类就是QDate
和QTime
这两个类的结合体。
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // 构造函数 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(); |
相关文章:
【Qt】Qt常见的数据类型
思维导图 学习目标 一、基础类型 因为Qt是一个C的框架,因此C的语法和数据类型在Qt中都是被支持的,但是Qt中也是定义了一些属于自己的数据类型,不过,好多数据类型都是对C的数据类型进行封装,下面来简要介绍一下这些基…...
【源码】Spring Data JPA原理解析之事务执行原理
Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…...
第十一篇——信息增量:信息压缩中的保守主义原则
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 通过信息中的保守主义,我想到了现实中人的保守主义一样&#…...
中国飞行器设计创新大赛多旋翼无人机任务飞行
源码:后续补充 1、启动launch文件 roslaunch robot_bringup mission.launch <launch> <!--启动mavros节点 --><include file"$(find mavros)/launch/px4.launch" /><!--启动USB摄像头节点 --><include file"$(find…...
WPF-UI布局
WPF布局元素有如下几个: Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移…...
武忠祥17堂课没必要全听,这几个才是精华!
作者:Captain 链接:https://www.zhihu.com/question/381665751/answer/3197724055 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 17堂课类似于习题课,是专题训练 17堂课省略了…...
Android 蓝牙profile的配置
在做BQB认证之前,我们需要确认那些profile之前,我们需要查看profile的配置情况 Android13版本前蓝牙profile的配置 MTK的项目代码如下 vendor\mediatek\proprietary\packages\modules\Bluetooth\android\app\res\values\config.xml 高通的项目代码如…...
Selenium时间等待_显示等待
特点: 针对具体元素进行时间等待 可以自定义等待时长和间隔时间 按照设定的时间,不断定位元素,定位到了直接执行下一步操作 如在设定时间内没定位到元素,则报错(TimeOutException) 显示等待概念&#x…...
41 mysql subquery 的实现
前言 sub query 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 sub query 的相关处理 查看 本文, 需要 先看一下 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NUL…...
钉钉二次开发-企业内部系统集成官方OA审批流程(三)
书接上回,本文主要分享 企业内部系统集成钉钉官方OA审批流程的步骤 的第二部分。 前端代码集成钉钉免登JSAPI: 前端通过corpid 获得钉钉临时访问码code,再通过临时访问码code调用此接口返回当前用户的姓名、userid、 钉钉用户id、 系统工号、 钉钉部门…...
代码随想录算法训练营第五十四 | ● 392.判断子序列 ● 115.不同的子序列
392.判断子序列 https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html class Solution { public:bool isSubsequence(string s, string t) {if(s.size()0 )return true;if(t.size()0)return false;vector<vector<int>> dp(s.size(…...
C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编
运行在VS2022,x86,Debug下。 30. 外观模式 为子系统定义一组统一的接口,这个高级接口会让子系统更容易被使用。应用:如在游戏开发中,游戏引擎包含多个子系统,如物理、渲染、粒子、UI、音频等。可以使用外观…...
嵌入式软件测试相关分析
嵌入式软件测试相关分析 1. 引言 在软件发展之初,上个世纪五六十年代,软件被视为数学领域,编程是为了进行数学计算,由数学公式推导,来写函数。因此,在那个时候所编写的程序是被视为数学问题,数…...
vue+jave实现文件报表增加文件下载功能
需求背景:系统有文件交互功能。但没有做页面展示。为了测试方便,写了报表展示并可下载文件做检查。(所以下载是依赖表数据的) 使用语言和框架: 前端:vue-cli 后端:springBoot 前端实现 1、在报表vue文件,显示下载按钮并实现下载接口请求和处理。 //报…...
网站安全性评估方法
评估一个网站的安全性是一个多方面的过程,涉及到对网站的技术架构、代码质量、数据处理、用户交互等多个维度的考察。以下是一些常用的评估方法: 1.了解常见的安全风险:包括恶意软件、钓鱼攻击、跨站脚本攻击等,这些都是网站可能…...
【小程序】WXML模板语法
目录 数据绑定 数据绑定的基本原则 在data中定义页面的数据 Mustache语法的格式 Mustache语法的应用场景 事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 事件…...
[数据集][目标检测]厨房积水检测数据集VOC+YOLO格式88张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):88 标注数量(xml文件个数):88 标注数量(txt文件个数):88 标注类别数…...
QSlider样式示例
参考代码: /********************QSlider横向滑动条样式**********************/ QSlider {background-color: rgba(170, 255, 255, 100); /* 设置滑动条主体*/ }QSlider::groove:horizontal {border: 1px solid #999999;height: 8px; /* 默认…...
【Linux】进程3——PID/PPID,父进程,子进程
在讲父子进程之前,我们接着上面那篇继续讲 1.查看进程 mycode.c makefile 我们在zs_108直接编译mycode.c,直接运行,然后我们转换另一个账号来查看这个进程 我们可以通过ps指令来查看进程 我们就会好奇了,第二行是什么ÿ…...
开发常用的组件库
框架: Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) React 官方中文文档 (docschina.org) Svelte 中文文档 | Svelte 中文网 SolidJS 反应式 JavaScript 库 页面样式: 网页端: 指南 |元素 (eleme.cn) Mint UI (mint-ui.github.io…...
深度解析地铁票务系统的技术架构与创新应用
在城市交通体系中,地铁作为一种快速、便捷的公共交通方式,已经成为现代都市生活的重要组成部分。而地铁票务系统的技术架构,则是支撑地铁运营的核心之一。本文将深度解析地铁票务系统的技术架构与创新应用,从系统设计、数据管理、…...
Python集合的基本概念和使用方法
目录 集合(Set) 基本概念 基本特性 基本操作 集合运算 成员测试 高级操作 集合推导式 总结 集合(Set) Python集合(Set)是Python语言中一个非常实用且强大的数据结构,它用于存储多个不…...
谷歌浏览器124版本Webdriver驱动下载
查看谷歌浏览器版本 在浏览器的地址栏输入: chrome://version/回车后即可查看到对应版本(不要点击帮助-关于Google chrome,因为点击后会自动更新谷歌版本) 114之前版本:下载链接 123以后版本:下载链接࿰…...
十大排序
本文将以「 通俗易懂」的方式来描述排序的基本实现。 🧑💻阅读本文前,需要一点点编程基础和一点点数据结构知识 本文的所有代码以cpp实现 文章目录 排序的定义 插入排序 ⭐ 🧐算法描述 💖具体实现 …...
微信小程序学习笔记(1)
文章目录 一、文件作用app.json:project.config.json:sitemap.json页面中.json 二、项目首页三、语法**WXML**和**HTML**WXSS 和CSS的区别小程序中.js文件的分类 一、文件作用 app.json: 当前小程序的全局配置,包括所有页面路径、窗口外观、…...
OpenGauss数据库-6.表空间管理
第1关:创建表空间 gsql -d postgres -U gaussdb -W passwd123123 CREATE TABLESPACE fastspace OWNER omm relative location tablespace/tablespace_1; 第2关:修改表空间 gsql -d postgres -U gaussdb -W passwd123123 ALTER TABLESPACE fastspace R…...
相约乌镇 续写网络空间命运与共的新篇章(二)
从乌镇峰会升级为世界互联网大会,既是展示互联网发展成果的技术盛会,也是尖端科技综合运用的宏大场景。从枕水江南散发出的“互联网之光”,到前沿技术的创新突破和场景应用,澎湃的是数字经济浪潮,激荡的是科技创新能量…...
【全网最简单的解决办法】vscode中点击运行出现仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用
首先确保你是否下载好了gcc编译器!!! 检测方法: winR 打开cmd命令窗 输入where gcc(如果出现路径则说明gcc配置好啦!) where gcc 然后打开我们的vscode 把这个文件删除掉 再次点击运行代码,第一个出现…...
NFS共享存储服务
NFS共享存储服务 NFS:network file system ,在计算机网络中共享文件系统的协议。 计算机之间可以通过网络共享目录和文件,分为两个部分: 1、rpcbind:远程共享调用 2、nfs:共享服务,端口号:2…...
Docker面试整理-Docker 常用命令
Docker 提供了一套丰富的命令行工具,使得用户能够管理容器、镜像、网络和卷等资源。这里列出了一些常用的 Docker 命令: 镜像相关命令:docker pull [OPTIONS] NAME[:TAG|@DIGEST]: 从仓库拉取一个镜像或仓库。docker push NAME[:TAG]: 推送一个镜像或仓库到远程仓库。docker …...
做网站客户最关心的是什么/互联网全网推广
初始化仓库 创建分支并切换 $ git checkout -b dev//或者分两步$ git branch dev$ git checkout dev 查看当前分支状态 $ git branch 对工作区的修改和提交 把dev合并到master上 $ git checkout master//fastforward模式(会将dev分支上的修改合并到master上…...
小程序定制开发团队/汕头seo不错
一、VBS语言基础 1.运算符和表达式 (1)运算符 (2)表达式 a.数学表达式:由算术运算符连接,计算结果为数字 b.字符串表达式:由字符串连接符连接&#x…...
wordpress腾讯后台账号/国内比较好的软文网站
点击上方蓝字 关注我们1、游戏简介游戏名称:萌宅物语无限爱心版游戏类型:养成游戏游戏平台:安卓整理时间:2020-05-30游戏评分:8.72、游戏介绍心得技巧分享特别说明游戏已修改为无限爱心版,在游戏中完成教程…...
php网站开发实例教程 源代码/天津优化网络公司的建议
目前,北京、广州、深圳、上海、武汉、郑州、成都等全国90多个城市已实施了车辆限行规定。全国提供限行接口的平台众多,今天就分析一下目前主流的三个平台限行接口特点,聚合数据、极速数据、路帮网。 以下主要从三个方面,即平台涵盖…...
wordpress邮件有%3c%3e/关键词有哪些
最近工作中需要监测某个分公司到IDC机房的网络情况,到网络上找了不少软件,发现一款叫smokeping的开源软件还不错,它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态和稳定性。 下面介绍一下软…...
wordpress 国内云/想做个网络推广
编者按Branch-and-Cut 是求解整数规划或混合整数规划问题最常用的算法之一。通常,把全部可行解空间反复地分割为越来越小的子集,称为分支;并且对每个子集内的解集计算一个目标下界(对于最小值问题),称为定界…...