qt-C++笔记之QStringList

qt-C++笔记之QStringList

—— 杭州 2023-12-03

code review!

文章目录

  • qt-C++笔记之QStringList
    • 1.1.《Qt官方文档》第一部分翻译:继承自QList\<QString\>-初始化-添加字符串
    • 1.2.迭代字符串
    • 1.3.join()和split()
    • 1.4.filter()
    • 1.5.lastIndexOf()
    • 1.6.indexOf()
    • 1.7.replaceInStrings()以及比较QString 类则提供了replace()函数
    • 1.8.一些常用方法和操作
    • 1.9.QStringList和QList<QString>关系
    • 2.0.QStringList的append(),append(),operator+()
    • 2.1.QStringLis:Public Functions
    • 2.2.QStringLis:List of all members, including inherited members
    • 2.3.Classes for String Data(Qt中字符串数据的类)

**《Qt官方文档》链接:**

https://doc.qt.io/qt-6/qstringlist.html

1.1.《Qt官方文档》第一部分翻译:继承自QList<QString>-初始化-添加字符串

原文:

在这里插入图片描述

翻译:

在这里插入图片描述

1.2.迭代字符串

在Qt中,遍历 QStringList 可以使用迭代器、foreach 循环或基于索引的循环。下面是这些遍历方法的详细说明:

  1. 使用迭代器:

    QStringList stringList;
    stringList << "Apple" << "Banana" << "Cherry";QStringList::iterator it;
    for (it = stringList.begin(); it != stringList.end(); ++it) {qDebug() << *it;
    }
    ```使用迭代器可遍历 `QStringList`,通过 `begin()` 获取迭代器的起始位置,通过 `end()` 获取迭代器的结束位置。在循环中,使用 `*it` 来访问迭代器当前指向的元素。
  2. 使用 foreach 循环:

    QStringList stringList;
    stringList << "Apple" << "Banana" << "Cherry";foreach (const QString& str, stringList) {qDebug() << str;
    }
    `````foreach` 循环提供了一种简洁的方式来遍历 `QStringList`。在每次迭代中,变量 `str` 将依次引用列表中的元素。
  3. 基于索引的循环:

    QStringList stringList;
    stringList << "Apple" << "Banana" << "Cherry";for (int i = 0; i < stringList.size(); ++i) {qDebug() << stringList.at(i);
    }
    

    基于索引的循环遍历 QStringList 可以使用下标运算符 []at() 函数来访问列表中的元素。以下是基于索引的循环遍历的详细说明:

    QStringList stringList;
    stringList << "Apple" << "Banana" << "Cherry";for (int i = 0; i < stringList.size(); ++i) {QString str = stringList[i]; // 或者使用 stringList.at(i)qDebug() << str;
    }
    

    在上述示例中,我们创建了一个 QStringList 对象 stringList,其中包含多个字符串元素。然后,我们使用基于索引的循环遍历列表。在每次迭代中,我们使用下标运算符 []at() 函数来获取列表中的元素并将其存储在 str 变量中。最后,我们输出 str 的值。

    需要注意的是,索引从 0 开始,因此循环条件是 i < stringList.size()。我们使用 size() 函数获取列表的大小。

1.3.join()和split()

在这里插入图片描述

1.4.filter()

在这里插入图片描述

以下是一个完整的示例代码:

#include <QtCore>int main() {QStringList fonts;fonts << "Arial" << "Courier New" << "Times New Roman" << "Fixedsys";QStringList monospacedFonts = fonts.filter(QRegularExpression("Courier|Fixed"));qDebug() << "Monospaced Fonts:";for (const QString& font : monospacedFonts) {qDebug() << font;}return 0;
}

在这个示例中,我们先创建了一个 QStringList 对象 fonts,并向其添加了几个字体名称。然后,使用 filter() 函数结合正则表达式 "Courier|Fixed" 筛选出包含 “Courier” 或 “Fixed” 的字体名称,并将结果存储在 monospacedFonts 中。

最后,通过遍历 monospacedFonts,将筛选结果输出到调试输出中。

运行这段代码,你将得到如下输出结果:

Monospaced Fonts:
"Courier New"
"Fixedsys"

输出结果显示了满足条件的字体名称,即 “Courier New” 和 “Fixedsys”。这表明代码成功地筛选出了包含 “Courier” 或 “Fixed” 的字体名称。

1.5.lastIndexOf()

QStringList 类提供了 lastIndexOf() 函数用于查找指定字符串在列表中最后出现的位置(索引)。

函数原型如下:

int lastIndexOf(const QString& value, int from = -1) const;

参数说明:

  • value:要查找的字符串。
  • from:可选参数,指定开始搜索的索引位置,默认值为 -1,表示从列表的末尾开始搜索。

函数返回值:

  • 如果找到了指定的字符串,则返回最后一个匹配项的索引值。
  • 如果没有找到匹配项,则返回 -1。

以下是一个示例,演示如何使用 lastIndexOf() 函数查找字符串在 QStringList 中最后出现的位置:

#include <QtCore>int main() {QStringList stringList;stringList << "Apple" << "Banana" << "Cherry" << "Banana" << "Apple";int lastIndex = stringList.lastIndexOf("Banana");if (lastIndex != -1) {qDebug() << "Last occurrence of 'Banana' found at index:" << lastIndex;} else {qDebug() << "No occurrence of 'Banana' found in the list.";}return 0;
}

在上述示例中,我们创建了一个 QStringList 对象 stringList,其中包含多个字符串元素。然后,我们使用 lastIndexOf() 函数查找字符串 “Banana” 在列表中最后出现的位置,并将结果存储在 lastIndex 中。

最后,我们根据 lastIndex 的值输出相应的信息。

运行这段代码,你将得到如下输出结果:

Last occurrence of 'Banana' found at index: 3

输出结果表明,字符串 “Banana” 在列表中最后出现的位置是索引 3。

1.6.indexOf()

QStringList 类提供了 indexOf() 函数用于查找指定字符串在列表中第一次出现的位置(索引)。

函数原型如下:

int indexOf(const QString& value, int from = 0) const;

参数说明:

  • value:要查找的字符串。
  • from:可选参数,指定开始搜索的索引位置,默认值为 0,表示从列表的开头开始搜索。

函数返回值:

  • 如果找到了指定的字符串,则返回第一个匹配项的索引值。
  • 如果没有找到匹配项,则返回 -1。

以下是一个示例,演示如何使用 indexOf() 函数查找字符串在 QStringList 中第一次出现的位置:

#include <QtCore>int main() {QStringList stringList;stringList << "Apple" << "Banana" << "Cherry" << "Banana" << "Apple";int firstIndex = stringList.indexOf("Banana");if (firstIndex != -1) {qDebug() << "First occurrence of 'Banana' found at index:" << firstIndex;} else {qDebug() << "No occurrence of 'Banana' found in the list.";}return 0;
}

在上述示例中,我们创建了一个 QStringList 对象 stringList,其中包含多个字符串元素。然后,我们使用 indexOf() 函数查找字符串 “Banana” 在列表中第一次出现的位置,并将结果存储在 firstIndex 中。

最后,我们根据 firstIndex 的值输出相应的信息。

运行这段代码,你将得到如下输出结果:

First occurrence of 'Banana' found at index: 1

输出结果表明,字符串 “Banana” 在列表中第一次出现的位置是索引 1。

1.7.replaceInStrings()以及比较QString 类则提供了replace()函数

在这里插入图片描述

QStringList 类提供了一个成员函数 replaceInStrings(),用于在列表中的每个字符串中进行替换操作。而 QString 类则提供了 replace() 函数,用于执行单个字符串的替换操作。

  1. QStringList::replaceInStrings(const QString& before, const QString& after)

    • 此函数用于在列表中的每个字符串中将 before 替换为 after
    • 它会修改原始的 QStringList 对象,将所有匹配的字符串进行替换。
    • 示例:
    QStringList stringList;
    stringList << "apple" << "banana" << "cherry";stringList.replaceInStrings("a", "X");// 输出结果: "Xpple", "bXnXnX", "cherry"
    qDebug() << stringList;
    ```
  2. QString::replace(const QString& before, const QString& after)

    • 此函数用于在单个字符串中将 before 替换为 after
    • 它返回一个新的字符串,不会修改原始的 QString 对象。
    • 示例:
    QString str = "apple banana cherry";
    QString replacedStr = str.replace("a", "X");// 输出结果: "Xpple bXnXnX cherry"
    qDebug() << replacedStr;
    ```

这两个函数都能执行字符串的替换操作,但 replaceInStrings() 是在 QStringList 对象的每个字符串中进行替换,而 replace() 是在单个字符串中进行替换。你可以根据自己的需求选择使用哪个函数。

1.8.一些常用方法和操作

QStringList是Qt框架中的一个类,用于存储字符串列表。它提供了一组方法和操作,方便对字符串列表进行处理、访问和修改。

以下是QStringList类的一些常用方法和操作的详细解释:

1. 构造函数和赋值操作符:

  • QStringList():默认构造函数,创建一个空的字符串列表。
  • QStringList(const QStringList &other):拷贝构造函数,使用另一个字符串列表初始化当前列表。
  • QStringList &operator=(const QStringList &other):赋值操作符,将另一个字符串列表赋值给当前列表。

2. 添加和移除元素:

  • void append(const QString &str):向列表末尾添加一个字符串。
  • void prepend(const QString &str):向列表开头添加一个字符串。
  • void insert(int i, const QString &str):在指定位置插入一个字符串。
  • void removeAt(int i):移除指定位置的字符串。
  • void removeOne(const QString &str):移除第一个匹配给定字符串的元素。
  • void removeAll(const QString &str):移除所有匹配给定字符串的元素。
  • void clear():清空列表,移除所有元素。

3. 获取和修改元素:

  • int size() const:返回列表中元素的数量。
  • bool isEmpty() const:检查列表是否为空。
  • QString at(int i) const:返回指定位置的字符串。
  • QString &operator[](int i):访问指定位置的字符串,可用于修改该元素。
  • const QString &operator[](int i) const:以只读方式访问指定位置的字符串。
  • QStringList mid(int pos, int length = -1) const:返回从指定位置开始的指定长度子列表。
  • QStringList &replace(int i, const QString &str):将指定位置的字符串替换为给定字符串。
  • QStringList &replace(const QString &before, const QString &after):将所有匹配给定字符串的元素替换为新的字符串。

4. 其他常用方法:

  • bool contains(const QString &str) const:检查列表中是否包含给定字符串。
  • int indexOf(const QString &str, int from = 0) const:返回第一个匹配给定字符串的位置。
  • int lastIndexOf(const QString &str, int from = -1) const:返回最后一个匹配给定字符串的位置。
  • QString join(const QString &separator) const:将列表中的所有元素连接为一个字符串,使用给定的分隔符分隔。

QStringList提供了方便的方法来处理字符串列表,如添加、移除、访问和修改元素等。它在Qt中广泛用于处理和操作字符串集合的场景,例如配置文件解析、日志记录、命令行参数处理等。

1.9.QStringList和QList关系

QStringListQList<QString> 都是Qt中用于存储字符串的容器类,但它们在实现和使用上有一些区别。

  1. 类型差异:

    • QStringList 是一个专门用于存储字符串的类,是 QString 类的派生类,可以直接使用 QString 的成员函数。
    • QList<QString> 是一个通用的列表类,可以存储任意类型的元素,其中的元素类型指定为 QString
  2. 头文件和命名空间:

    • QStringList 类定义在 <QStringList> 头文件中,属于 Qt 命名空间。
    • QList<QString> 类定义在 <QList> 头文件中,同样属于 Qt 命名空间。
  3. 成员函数和使用:

    • QStringList 类提供了一些特定于字符串列表的成员函数,如 join()split()contains() 等。
    • QList<QString> 类提供了通用的列表操作函数,如 append()insert()remove() 等。
    • 由于 QStringListQString 的派生类,可以直接使用 QString 类的成员函数。
  4. 隐式转换:

    • QStringList 对象可以隐式转换为 QList<QString> 对象,即可以将 QStringList 类型的对象赋值给 QList<QString> 类型的变量。
    • QList<QString> 对象不能隐式转换为 QStringList 对象。

在实践中,QStringList 通常用于处理字符串的特定需求,如字符串的拆分和合并,而 QList<QString> 则更通用,适用于任意类型的元素的存储和操作。如果你只需要存储字符串,推荐使用 QStringList,如果需要存储其他类型的元素,可以使用 QList

2.0.QStringList的append(),append(),operator+()

在Qt中,QStringList 提供了几种方法来添加和组合字符串:

  1. append(const QString& str):该函数用于将指定的字符串添加到 QStringList 的末尾。例如:
QStringList stringList;
stringList.append("Apple");
stringList.append("Banana");

在上述示例中,我们使用 append() 函数将字符串 “Apple” 和 “Banana” 添加到 stringList 中。

  1. operator<<(const QString& str):该运算符重载函数也可以用于将字符串添加到 QStringList 的末尾。例如:
QStringList stringList;
stringList << "Apple" << "Banana";

这个运算符的使用方式类似于使用 append() 函数。

  1. operator+(const QStringList& other):该运算符重载函数用于将两个 QStringList 进行连接。它会返回一个新的 QStringList,包含两个操作数的所有元素。例如:
QStringList list1;
list1 << "Apple" << "Banana";QStringList list2;
list2 << "Cherry" << "Durian";QStringList combinedList = list1 + list2;

在上述示例中,我们使用 operator+() 运算符将 list1list2 进行连接,得到一个新的 combinedList,其中包含所有元素。

需要注意的是,operator+() 运算符返回的是一个新的 QStringList,原始的操作数 list1list2 不会被修改。

这些函数和运算符提供了不同的方式来添加和组合字符串,可以根据具体的需求选择使用哪种方式。

2.1.QStringLis:Public Functions

QStringList(const QString &str)
QStringList(const QList<QString> &other)
QStringList(QList<QString> &&other)
bool	contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool	contains(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool	contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList	filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList	filter(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList	filter(const QRegularExpression &re) const
qsizetype	indexOf(const QRegularExpression &re, qsizetype from = 0) const
QString	join(const QString &separator) const
QString	join(QStringView separator) const
QString	join(QLatin1StringView separator) const
QString	join(QChar separator) const
qsizetype	lastIndexOf(const QRegularExpression &re, qsizetype from = -1) const
qsizetype	removeDuplicates()
QStringList &	replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &	replaceInStrings(QStringView before, QStringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &	replaceInStrings(const QString &before, QStringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &	replaceInStrings(QStringView before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList &	replaceInStrings(const QRegularExpression &re, const QString &after)
void	sort(Qt::CaseSensitivity cs = Qt::CaseSensitive)
QStringList	operator+(const QStringList &other) const
QStringList &	operator<<(const QString &str)
QStringList &	operator<<(const QStringList &other)
QStringList &	operator<<(const QList<QString> &other)
QStringList &	operator=(const QList<QString> &other)
QStringList &	operator=(QList<QString> &&other)

2.2.QStringLis:List of all members, including inherited members

class const_iterator
class iterator
ConstIterator
Iterator
const_pointer
const_reference
const_reverse_iterator
difference_type
parameter_type
pointer
reference
reverse_iterator
rvalue_ref
size_type
value_type
QStringList(const QString &)
QStringList(const QList<QString> &)
QStringList(QList<QString> &&)
append(QList::parameter_type)
append(QList::rvalue_ref)
append(const QList<T> &)
append(QList<T> &&)
assign(qsizetype, QList::parameter_type) : QList<T> &
assign(InputIterator, InputIterator) : QList<T> &
assign(std::initializer_list<T>) : QList<T> &
at(qsizetype) const : QList::const_reference
back() : QList::reference
back() const : QList::const_reference
begin() : QList::iterator
begin() const : QList::const_iterator
capacity() const : qsizetype
cbegin() const : QList::const_iterator
cend() const : QList::const_iterator
clear()
constBegin() const : QList::const_iterator
constData() const : QList::const_pointer
constEnd() const : QList::const_iterator
constFirst() const : const T &
constLast() const : const T &
contains(const QString &, Qt::CaseSensitivity) const : bool
contains(const AT &) const : bool
contains(QLatin1StringView, Qt::CaseSensitivity) const : bool
contains(QStringView, Qt::CaseSensitivity) const : bool
count(const AT &) const : qsizetype
count() const : qsizetype
crbegin() const : QList::const_reverse_iterator
crend() const : QList::const_reverse_iterator
data() : QList::pointer
data() const : QList::const_pointer
emplace(qsizetype, Args &&...) : QList::iterator
emplace(QList::const_iterator, Args &&...) : QList::iterator
emplaceBack(Args &&...) : QList::reference
emplace_back(Args &&...) : QList::reference
empty() const : bool
end() : QList::iterator
end() const : QList::const_iterator
endsWith(QList::parameter_type) const : bool
erase(QList::const_iterator) : QList::iterator
erase(QList::const_iterator, QList::const_iterator) : QList::iterator
fill(QList::parameter_type, qsizetype) : QList<T> &
filter(const QString &, Qt::CaseSensitivity) const : QStringList
filter(QStringView, Qt::CaseSensitivity) const : QStringList
filter(const QRegularExpression &) const : QStringList
first() : T &
first() const : const T &
first(qsizetype) const : QList<T>
front() : QList::reference
front() const : QList::const_reference
indexOf(const AT &, qsizetype) const : qsizetype
indexOf(const QRegularExpression &, qsizetype) const : qsizetype
insert(qsizetype, QList::parameter_type) : QList::iterator
insert(qsizetype, qsizetype, QList::parameter_type) : QList::iterator
insert(QList::const_iterator, QList::parameter_type) : QList::iterator
insert(QList::const_iterator, qsizetype, QList::parameter_type) : QList::iterator
insert(QList::const_iterator, QList::rvalue_ref) : QList::iterator
insert(qsizetype, QList::rvalue_ref) : QList::iterator
isEmpty() const : bool
join(const QString &) const : QString
join(QStringView) const : QString
join(QLatin1StringView) const : QString
join(QChar) const : QString
last() : T &
last() const : const T &
last(qsizetype) const : QList<T>
lastIndexOf(const AT &, qsizetype) const : qsizetype
lastIndexOf(const QRegularExpression &, qsizetype) const : qsizetype
length() const : qsizetype
mid(qsizetype, qsizetype) const : QList<T>
move(qsizetype, qsizetype)
pop_back()
pop_front()
prepend(QList::rvalue_ref)
prepend(QList::parameter_type)
push_back(QList::parameter_type)
push_back(QList::rvalue_ref)
push_front(QList::rvalue_ref)
push_front(QList::parameter_type)
rbegin() : QList::reverse_iterator
rbegin() const : QList::const_reverse_iterator
remove(qsizetype, qsizetype)
removeAll(const AT &) : qsizetype
removeAt(qsizetype)
removeDuplicates() : qsizetype
removeFirst()
removeIf(Predicate) : qsizetype
removeLast()
removeOne(const AT &) : bool
rend() : QList::reverse_iterator
rend() const : QList::const_reverse_iterator
replace(qsizetype, QList::parameter_type)
replace(qsizetype, QList::rvalue_ref)
replaceInStrings(const QString &, const QString &, Qt::CaseSensitivity) : QStringList &
replaceInStrings(QStringView, QStringView, Qt::CaseSensitivity) : QStringList &
replaceInStrings(const QString &, QStringView, Qt::CaseSensitivity) : QStringList &
replaceInStrings(QStringView, const QString &, Qt::CaseSensitivity) : QStringList &
replaceInStrings(const QRegularExpression &, const QString &) : QStringList &
reserve(qsizetype)
resize(qsizetype)
resize(qsizetype, QList::parameter_type)
shrink_to_fit()
size() const : qsizetype
sliced(qsizetype, qsizetype) const : QList<T>
sliced(qsizetype) const : QList<T>
sort(Qt::CaseSensitivity)
squeeze()
startsWith(QList::parameter_type) const : bool
swap(QList<T> &)
swapItemsAt(qsizetype, qsizetype)
takeAt(qsizetype) : T
takeFirst() : QList::value_type
takeLast() : QList::value_type
value(qsizetype) const : T
value(qsizetype, QList::parameter_type) const : T
operator!=(const QList<T> &) const : bool
operator+(const QStringList &) const : QStringList
operator+(const QList<T> &) const : QList<T>
operator+(const QList<T> &) : QList<T>
operator+(QList<T> &&) const : QList<T>
operator+(QList<T> &&) : QList<T>
operator+=(const QList<T> &) : QList<T> &
operator+=(QList<T> &&) : QList<T> &
operator+=(QList::parameter_type) : QList<T> &
operator+=(QList::rvalue_ref) : QList<T> &
operator<(const QList<T> &) const : bool
operator<<(const QString &) : QStringList &
operator<<(QList::parameter_type) : QList<T> &
operator<<(const QStringList &) : QStringList &
operator<<(const QList<T> &) : QList<T> &
operator<<(const QList<QString> &) : QStringList &
operator<<(QList<T> &&) : QList<T> &
operator<<(QList::rvalue_ref) : QList<T> &
operator<=(const QList<T> &) const : bool
operator=(const QList<QString> &) : QStringList &
operator=(std::initializer_list<T>) : QList<T> &
operator=(QList<QString> &&) : QStringList &
operator=(const QList<T> &) : QList<T> &
operator=(QList<T> &&) : QList<T> &
operator==(const QList<T> &) const : bool
operator>(const QList<T> &) const : bool
operator>=(const QList<T> &) const : bool
operator[](qsizetype) : QList::reference
operator[](qsizetype) const : QList::const_reference

2.3.Classes for String Data(Qt中字符串数据的类)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Delphi】实现彩色日志显示框(TRichEdit Helper)

目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候&#xff0c;经常需要显示程序运行的日志&#xff0c;一般我们会使用TMemo&#xff0c;使用起来简单&#xff0c…

简单3D姿态基线模型网络架构与验证【SIM】

在这篇文章中&#xff0c;我们将回顾 ICCV’17 上提出的 Simple 3D Pose Baseline &#xff0c;即用于 3d 人体姿势估计的简单而有效的基线&#xff0c;也称为 SIM。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

基础组件总结(以Element UI组件库为例)

一般对一个组件的使用方式&#xff1a; 每一个组件都有被绑定的数据&#xff0c; &#xff08;1&#xff09;首先会对组件的数据初始化&#xff08;a.data中赋初值 b. 在生命周期函数created或mounted中为变量赋予初值&#xff09; &#xff08;2&#xff09;由于不同组件的…

C语言扫雷小游戏

以下是一个简单的C语言扫雷小游戏的示例代码&#xff1a; #include <stdio.h>#include <stdlib.h>#include <time.h>#define BOARD_SIZE 10#define NUM_MINES 10int main() { int board[BOARD_SIZE][BOARD_SIZE]; int num_flags, num_clicks; int …

threadlocal - 黑马程序员

目录 1、ThreadLocal介绍1.2 ThreadLocal基本使用1.2.1、常用方法1.2.2 使用案例 1.3 ThreadLocal类与synchronized关键字 2、运用场景_事务案例3、ThreadLocal的内部结构4、 ThreadLocal的核心方法源码5、ThreadLocalMap源码分析5.2 弱引用和内存泄漏 课程地址&#xff1a; ht…

Blender学习笔记:小车狂奔动画

文章目录 路旁小树汽车尾气移动 教程地址&#xff1a;八个案例教程带你从0到1入门blender【已完结】 小车建模 路旁小树 1 添加摄像机&#xff0c;在小车下面拉一个平面&#xff0c;覆盖到摄像机的观察视窗。复制一层平面&#xff0c;收窄变成小车两侧的路面&#xff0c;编辑…

【设计模式-4.3】行为型——责任链模式

说明&#xff1a;本文介绍设计模式中行为型设计模式中的&#xff0c;责任链模式&#xff1b; 审批流程 责任链模式属于行为型设计模式&#xff0c;关注于对象的行为。责任链模式非常典型的案例&#xff0c;就是审批流程的实现。如一个报销单的审批流程&#xff0c;根据报销单…

力扣每日一题day26[42. 接雨水]

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

一站式自动化:Ansible Playbook的全面学习之旅

1 Playbook介绍 1.1 Playbook介绍 playbook 是由一个或多个play组成的列表 Playbook 文件使用YAML来写的 1.2 YAML 1.2.1 介绍 是一种表达资料序列的格式&#xff0c;类似XML Yet Another Markup Language 2001年首次发表 www.yaml.org 1.2.2 特点 可读性好 和脚本语言交…

RPG项目01_新输入输出

基于“RPG项目01_脚本代码”&#xff0c;本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;如果一直跟着做教学项目&#xff0c;请先保存项目&#xff0c;再继续修改unity为新输入输出系统。 向下翻&#xff0c; 向下翻&#xff0c; 选择both加入新输入输出系…

Android把宽高均小于给定值的Bitmap放大到给定值,Kotlin

Android把宽高均小于给定值的Bitmap放大到给定值&#xff0c;Kotlin 假设拉伸放大到SIZE2048 fun scaleSize(image: Bitmap): Bitmap {val w image.widthval h image.heightvar newW: Intvar newH: Intif (w > h) {newW SIZEnewH (SIZE / w.toFloat()) * h} else {newW …

qt 动态生成柱状图

cpp文件 #include "mform.h" #include "ui_mform.h" #include <QBarSeries> #include <QBarSet> #include <QtCharts> #include <QPushButton> #include <QtCharts/QChartView> #include <QtCharts/QPieSeries> #inc…

浅学指针(5)sizeof和strlen的进阶理解

系列文章目录 文章目录 系列文章目录前言1. sizeof和strlen的对⽐1.1 sizeofsizeof不是函数&#xff0c;是运算符 1.2 strlen1.3 sizeof 和 strlen的对⽐ 2. 数组和指针笔试题解析• sizeof(数组名)&#xff0c;sizeof中单独放数组名&#xff0c;这⾥的数组名表⽰整个数组&…

51单片机应用从零开始(九)·数组

目录 1. 用字符型数组控制 P0 口 8 位 LED 流水点亮 2. 用 P0 口显示字符串常量 1. 用字符型数组控制 P0 口 8 位 LED 流水点亮 C语言中的字符型数组是一种数据类型&#xff0c;它是一个由字符组成的序列&#xff0c;以空字符\0结尾。在声明字符型数组时&#xff0c;需要指…

Git【成神路】

目录 1.为啥要学git啊&#xff1f;&#x1f615;&#x1f615;&#x1f615; 2.版本控制软件的基本功能 &#x1f91e;&#x1f91e;&#x1f91e; 3.集中式版本控制 &#x1f936;&#x1f936;&#x1f936; 4.分布式版本控制&#x1f60e;&#x1f60e;&#x1f60e; …

一款自动帮你生成UI界面和代码的AI神器

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 只要描述你想要的UI是什么样的&#xff0c;它就能帮你生成&#xff0c;是不是很神奇&#xff1f; v0使用 AI 模型根据简单的文本提示生成用户界面和代码&#xff…

利用STM32内置温度传感器实现温度监测系统

STM32微控制器是一款强大的嵌入式处理器&#xff0c;具有广泛的应用领域。其中&#xff0c;一些STM32微控制器内置了温度传感器&#xff0c;可以方便地实现温度监测功能。本文将详细介绍如何利用STM32内置温度传感器实现温度监测系统&#xff0c;并提供相应的示例代码。 一、硬…

智慧灯杆系统平台架构设计需要考虑的几个要点

智慧灯杆是一种集成了各种先进技术的道路照明设施。它不仅提供照明服务&#xff0c;还可以具有物联网技术、视频监控、环境监测、广播通讯、无线网络覆盖等多种功能。这些智能功能可以通过互联网进行控制和管理&#xff0c;从而实现智慧城市的建设。智慧灯杆能够提升城市的智能…

Wpf 使用 Prism 实战开发Day07

待办事项页面设计 效果图: 一.布局设计 页面主要分上下布局&#xff0c;分2行进行设计&#xff0c;使用 Grid.RowDefinitions 将页面分上下2行 例如&#xff1a; <Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition/> </Gri…

创意项目开源,文生图、排序/优选等...,持续开源更新!!

热烈欢迎大家在git上star&#xff01;&#xff01;&#xff01;冲鸭&#xff01;&#xff01;&#xff01; 1.dalle1在厨房家具中文场景上训练。 GitHub - leeguandong/DALLE1: dalle1在中文家具场景的微调&#xff0c;效果并不好dalle1在中文家具场景的微调&#xff0c;效果…