QAnyStringView Class
QAnyStringView 类通过QString API 的只读子集,为 Latin-1、UTF-8 或 UTF-16 字符串提供统一的视图。更多内容...
| 头文件: | #include <QAnyStringView> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 自: | Qt 6.0 |
- 所有成员的列表,包括继承的成员
- 已弃用的成员
- QAnyStringView 属于字符串数据类。
注意:该类中的所有函数均为可重入的。
QAnyStringView 比较
| 类别 | 可比较类型 |
|---|---|
| strong | QAnyStringView |
| strong | char16_t、QChar 、const char16_t *、const char *、QByteArray 、QByteArrayView 、QString 、QStringView 、QUtf8StringView 和QLatin1StringView 。 |
公共类型
公共函数
| QAnyStringView() | |
| QAnyStringView(const Char &ch) | |
| QAnyStringView(const Char (&string)[N]) | |
| QAnyStringView(const Char *str) | |
| QAnyStringView(const Container &str) | |
| QAnyStringView(const QByteArray &str) | |
| QAnyStringView(const QString &str) | |
| QAnyStringView(std::nullptr_t) | |
| QAnyStringView(const Char *first, const Char *last) | |
| QAnyStringView(const Char *str, qsizetype len) | |
(since 6.9) QString | arg(Args &&... args) const |
| QChar | back() const |
(since 6.5) void | chop(qsizetype n) |
(since 6.5) QAnyStringView | chopped(qsizetype n) const |
| const void * | data() const |
| bool | empty() const |
(since 6.5) QAnyStringView | first(qsizetype n) const |
| QChar | front() const |
| bool | isEmpty() const |
| bool | isNull() const |
(since 6.5) QAnyStringView | last(qsizetype n) const |
| qsizetype | length() const |
(since 6.8) qsizetype | max_size() const |
| qsizetype | size() const |
| qsizetype | size_bytes() const |
(since 6.8) QAnyStringView & | slice(qsizetype pos, qsizetype n) |
(since 6.8) QAnyStringView & | slice(qsizetype pos) |
(since 6.5) QAnyStringView | sliced(qsizetype pos) const |
(since 6.5) QAnyStringView | sliced(qsizetype pos, qsizetype n) const |
| QString | toString() const |
(since 6.5) void | truncate(qsizetype n) |
| decltype(auto) | visit(Visitor &&v) const |
静态公共成员
| int | compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
| QAnyStringView | fromArray(const Char (&string)[Size]) |
相关的非成员
| bool | operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs) |
| bool | operator<(const QAnyStringView &lhs, const QAnyStringView &rhs) |
(since 6.7) QDebug | operator<<(QDebug d, QAnyStringView s) |
| bool | operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs) |
| bool | operator==(const QAnyStringView &lhs, const QAnyStringView &rhs) |
| bool | operator>(const QAnyStringView &lhs, const QAnyStringView &rhs) |
| bool | operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs) |
详细说明
QAnyStringView 引用其并不拥有的字符串中的一段连续部分。它作为各种字符串的接口类型,无需先构造一个QString 。
与QStringView 和QUtf8StringView 不同,QAnyStringView可以包含以下任何一种编码的字符串:UTF-8、UTF-16和Latin-1。之所以支持Latin-1,是因为它与UTF-8不同,可以与UTF-16数据进行高效比较:长度不匹配就意味着这两个字符串不可能相等。 而对于 UTF-8/UTF-16 的比较则并非如此,因为 UTF-8 是一种可变长度编码。
字符串可以表示为char 、char8_t 、QChar 、ushort 、char16_t 或(在Windows等平台上,该类型为16位)wchar_t 的数组(或与数组兼容的数据结构,如QString 、std::basic_string等)。
QAnyStringView 被设计为一种接口类型;其主要用例是作为函数参数类型。 当 QAnyStringView 用作自动变量或数据成员时,必须注意确保所引用的字符串数据(例如,由QString 拥有的数据)在所有代码路径中都比 QAnyStringView 存活更久,以免字符串视图最终引用已被删除的数据。
例如,
QAnyStringView str = funcReturningQString(); // return value is a temp会导致 `str ` 引用已被删除的临时变量(这属于未定义行为)。对于单字符构造函数而言,这种情况尤为明显:
QAnyStringView ch = u' '; // u' ' is a temporary
// oops, ch references deleted temporary在这两种情况下,解决方案都是先将临时对象“固定”到一个左值上,然后再基于它创建 QAnyStringView:
const auto r = funcReturningQString();
QAnyStringView str = r; // ok, `r` outlives `str`
const auto sp = u' ';
QAnyStringView ch = sp; // ok, `sp` outlives `ch`然而,只要被调用函数的文档未要求更长的生命周期,将 QAnyStringView 作为其本意所指的接口类型使用总是安全的:
void func(QAnyStringView s);
func(u' ');
func(functionReturningQString());这正是 QAnyStringView 支持这些转换的初衷。
当作为接口类型使用时,QAnyStringView 允许单个函数接受多种多样的字符串数据源。 因此,一个接受 QAnyStringView 的函数可以替代五个函数重载(分别接受QString 、(const QChar*, qsizetype) 、QUtf8StringView 、QLatin1StringView (但参见上文)和QChar ),同时还能允许将更多类型的字符串数据源传递给该函数,例如u8"Hello World" 以及char8_t 字符串字面量。
与Qt中的其他地方一样,QAnyStringView默认假设char 数据采用UTF-8编码,除非其以QLatin1StringView 形式呈现。
不过,自 Qt 6.4 起,纯 US-ASCII 的 UTF-8 字符串字面量会自动以 Latin-1 格式存储。这是一项编译时检查,不会产生运行时开销。此功能需要在 C++20 环境下编译,或使用较新版本的 GCC。
QAnyStringView 应按值传递,而非按 const 引用传递:
void myfun1(QAnyStringView sv); // preferred
void myfun2(const QAnyStringView &sv); // compiles and works, but slowerQAnyStringView 也可以用作函数的返回值,但不建议这样做。QUtf8StringView 或QStringView 更适合作为函数返回值。 若调用返回 QAnyStringView 的函数,请特别注意:QAnyStringView 的存活时间不应超过该函数承诺保留所引用字符串数据的时间。如有疑问,请通过调用toString() 将 QAnyStringView 转换为QString ,从而获取对数据的强引用。
QAnyStringView 是一种字面量类型。
兼容的字符类型
QAnyStringView 支持多种字符类型的字符串:
char(包括有符号和无符号类型)char8_t(仅限 C++20)char16_twchar_t(即 16 位类型,例如 Windows)ushortQChar
8 位字符类型将被解释为 UTF-8 数据(以QLatin1StringView 形式呈现的情况除外),而 16 位字符类型将被解释为主机字节序下的 UTF-16 数据(与QString 相同)。
以下字符类型仅由单字符构造函数支持:
QLatin1CharQChar::SpecialCharacterwchar_t(当其为 32 位类型时,即 Unix 系统)(自 6.10 起)char32_t
这些字符类型在内部会被分解为一个 UTF-16 序列(最后一个字符使用QChar::fromUcs4() 进行处理)。
大小和子字符串
QAnyStringView 函数中的所有大小和位置均以编码的代码单位为单位(也就是说,对于这些函数而言,UTF-16 代理对计为两个单位,这与QString 中的处理方式一致;而 UTF-8 多字节序列则根据其长度计为两个、三个或四个单位)。
另请参阅 《应使用哪个字符串类?》、QUtf8StringView 以及QStringView 。
成员类型文档
QAnyStringView::difference_type
std::ptrdiff_t 的别名。为兼容 STL 而提供。
QAnyStringView::size_type
qsizetype 的别名。为兼容 STL 而提供。
成员函数文档
[constexpr noexcept] QAnyStringView::QAnyStringView()
构建一个空字符串视图。
另请参阅 ` isNull()`。
[constexpr noexcept] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char &ch)
基于单字符ch 构建一个字符串视图。其长度通常为1 (但请参见下文)。
一般而言,您必须假设通过此方式创建的 QAnyStringView 将在完整表达式结束时(即临时变量被删除时)开始引用过时的数据。 这意味着,将其用于向接受 QAnyStringView 的函数传递单个字符是可行且安全的(只要该函数的文档未要求其生命周期长于初始调用):
int to_int(QAnyStringView);
int res = to_int(u'9'); // OK, data stays around for the duration of the call但若让该对象存在更长时间,则会导致未定义行为:
QAnyStringView ch = u'9';
int res = to_int(ch); // (silent) ERROR: ch references deleted data若确有此需求,请优先使用
const auto nine = u'9';
QAnyStringView ch(nine); // ok, references `nine`, which outlives `ch`
int res = to_int(ch); // 9上述情况适用于所有直接支持的Compatible Character Types 。
如果ch 不属于上述类型,而仅仅转换为QChar (例如QChar::SpecialCharacter 或QLatin1Char ),则QAnyStringView将绑定到一个临时对象上,该对象会在完整表达式结束时被删除,就像第二个示例中那样。
如果ch 无法用单个UTF-16码单元表示(例如,因为它是char32_t 值),则该构造函数会将ch 分解为两个UTF-16码单元。 在这种情况下,生成的 QAnyStringView 的size() 结果为2 ,且用于存储分解结果的临时缓冲区将在完整表达式结束时被删除,类似于
[](char32_t ch, auto &&tmp = QChar::fromUcs4(ch)) {
return QAnyStringView(tmp);
}在此情况下,等效的安全版本应为
const auto decomposed = QChar::fromUcs4(ch);
QAnyStringView ch(decomposed);另请参阅 QChar::fromUcs4() 和Compatible Character Types 。
[constexpr noexcept] template <typename Char, size_t N> QAnyStringView::QAnyStringView(const Char (&string)[N])
基于字符串字面量string 构建一个字符串视图。该视图覆盖数组内容,直至遇到第一个Char(0) 或N (以先出现者为准)。若需获取整个数组,请改用fromArray()。
string 必须在该字符串视图对象的生命周期内始终有效。
约束
仅当string 是实际数组且Char 是兼容的字符类型时,才参与重载解析。
另请参阅 Compatible Character Types 。
[constexpr noexcept] template <typename Char> QAnyStringView::QAnyStringView(const Char *str)
在str 上构建一个字符串视图。其长度由扫描找到的第一个Char(0) 决定。
str 在该字符串视图对象的生命周期内,该字符串必须保持有效。
将nullptr 作为str 传入是安全的,并将生成一个空字符串视图。
约束
仅当str 不是数组且Char 是兼容的字符类型时,才参与重载解析。
另请参阅 isNull() 和Compatible Character Types 。
[constexpr noexcept] template <typename Container> requires if_compatible_container<Container> QAnyStringView::QAnyStringView(const Container &str)
在str 上构建一个字符串视图。长度取自std::size(str) 。
std::data(str) 在该字符串视图对象的生命周期内必须保持有效。
当且仅当std::size(str) == 0 时,该字符串视图为空。此构造函数是否会生成空字符串视图未作规定(若要实现此行为,std::data(str) 必须返回nullptr )。
约束
仅当 `Container ` 是一个与 `value_type` 具有兼容字符类型的容器时,才参与重载解析。
[noexcept] QAnyStringView::QAnyStringView(const QByteArray &str)
在str 上构建一个字符串视图。str 中的数据被解释为UTF-8编码。
str.data() 在该字符串视图对象的生命周期内,xml-ph-0000@deepl.internal必须始终有效。
当且仅当str.isNull() 为空时,该字符串视图才会为空。
[noexcept] QAnyStringView::QAnyStringView(const QString &str)
在str 上构建一个字符串视图。
str.data() 该条件必须在该字符串视图对象的生命周期内始终成立。
当且仅当str.isNull() 为空时,该字符串视图才会为空。
[constexpr noexcept] QAnyStringView::QAnyStringView(std::nullptr_t)
构建一个空字符串视图。
另请参阅 ` isNull()`。
[constexpr] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char *first, const Char *last)
在first 上构建一个字符串视图,其长度为(last -first)。
在该字符串视图对象的生命周期内,[first,last) 范围必须始终有效。
如果last 也是nullptr ,则将nullptr 作为first 传递是安全的,并将生成一个空字符串视图。
如果last 位于first 之前,或者first 为nullptr 时last 却不是,则行为未定义。
约束
仅当Char 是兼容的字符类型时,才参与重载解析。
另请参阅 isNull() 和Compatible Character Types 。
[constexpr] template <typename Char> requires if_compatible_char<Char> QAnyStringView::QAnyStringView(const Char *str, qsizetype len)
在str 上构建一个长度为len 的字符串视图。
在该字符串视图对象的生命周期内,范围[str,len) 必须始终有效。
如果len 也是 0,则将nullptr 作为str 传递是安全的,并将生成一个空字符串视图。
如果len 为负数,或者当 为正数且str 等于nullptr 时,其行为未定义。
约束
仅当Char 是兼容的字符类型时,才参与重载解析。
另请参阅 isNull() 和Compatible Character Types 。
[since 6.9] template <typename... Args> QString QAnyStringView::arg(Args &&... args) const
将该字符串中所有%N 的出现位置替换为args 中对应的参数。这些参数不按位置顺序:args 中的第一个参数将%N 替换为最低的N (所有该值),args 中的第二个参数将%N 替换为次低的N ,以此类推。
Args 可以是任何能隐式转换为QAnyStringView 的类型。
该函数在 Qt 6.9 中引入。
另请参阅 QString::arg(Args&&...)。
[constexpr] QChar QAnyStringView::back() const
返回字符串视图中的最后一个字符。
提供此函数是为了兼容 STL。
警告: 对空字符串视图调用 此函数将导致未定义行为。
另请参阅 front() 和Sizes and Sub-Strings 。
[constexpr, since 6.5] void QAnyStringView::chop(qsizetype n)
将此字符串视图截断n 个码点。
与 `*this = first(size() - n)` 相同。
注意: 当n < 0 或n >size() 时,行为未定义。
该函数在 Qt 6.5 中引入。
另请参见 sliced()、first()、last()、chopped()、truncate()、slice() 以及Sizes and Sub-Strings 。
[constexpr, since 6.5] QAnyStringView QAnyStringView::chopped(qsizetype n) const
返回从该对象开头开始,长度为 `size()` - `n ` 的子字符串。
与first(size() - n) 相同。
注意: 当n < 0 或n >size() 时,行为未定义。
该函数在 Qt 6.5 中引入。
另请参阅 sliced()、first()、last()、chop()、truncate()、slice() 以及Sizes and Sub-Strings 。
[static noexcept] int QAnyStringView::compare(QAnyStringView lhs, QAnyStringView rhs, Qt::CaseSensitivity cs = Qt::CaseSensitive)
将字符串视图lhs 与字符串视图rhs 进行比较:若lhs 小于rhs ,则返回负整数;若大于rhs ,则返回正整数;若两者相等,则返回零。
如果cs 为Qt::CaseSensitive (默认值),则比较区分大小写;否则,比较不区分大小写。
另请参阅 operator==()、operator<() 和operator>()。
[constexpr noexcept] const void *QAnyStringView::data() const
返回指向字符串视图中第一个字符的 const 指针。
注意: 返回值所表示的字符数组并非以空字符结尾。
另请参阅 size_bytes()。
[constexpr noexcept] bool QAnyStringView::empty() const
返回该字符串视图是否为空——即size() == 0 。
提供此函数是为了兼容 STL。
另请参阅 isEmpty()、isNull() 和size()。
[constexpr, since 6.5] QAnyStringView QAnyStringView::first(qsizetype n) const
返回一个字符串视图,其中包含该字符串视图的前n 个码点。
注意: 当n < 0 或n >size() 时,行为未定义。
该函数在 Qt 6.5 中引入。
另请参阅 last()、sliced()、chopped()、chop()、truncate()、slice() 和Sizes and Sub-Strings 。
[static constexpr noexcept] template <typename Char, size_t Size> requires if_compatible_char<Char> QAnyStringView QAnyStringView::fromArray(const Char (&string)[Size])
基于完整的字符字符串字面量string (包含Size 个元素,包括任何尾随的Char(0) )构建一个字符串视图。如果不想将空终止符包含在视图中,可以在确定它位于末尾时通过chop()将其移除。 或者,您可以使用接受数组字面量的构造函数重载,该构造函数将创建一个视图,该视图的长度将达到数据中的第一个空终止符之前(但不包括该空终止符)。
string 在该字符串视图对象的生命周期内必须保持有效。
如果 `Char ` 是兼容的字符类型,则此函数可与任何数组字面量配合使用。兼容的字符类型包括:QChar 、ushort 、char16_t 以及(在 Windows 等将其视为 16 位类型的平台上)wchar_t 。
[constexpr] QChar QAnyStringView::front() const
返回字符串视图中的第一个字符。
提供此函数是为了兼容 STL。
警告: 对空字符串视图调用 此函数将导致未定义行为。
另请参阅 back() 和Sizes and Sub-Strings 。
[constexpr noexcept] bool QAnyStringView::isEmpty() const
返回该字符串视图是否为空——即size() == 0 。
提供此函数是为了与其他 Qt 容器保持兼容性。
另请参阅 empty()、isNull() 和size()。
[constexpr noexcept] bool QAnyStringView::isNull() const
返回该字符串视图是否为空——即,data() == nullptr 。
提供此函数是为了与其他 Qt 容器保持兼容性。
另请参阅 empty()、isEmpty() 和size()。
[constexpr, since 6.5] QAnyStringView QAnyStringView::last(qsizetype n) const
返回一个字符串视图,其中包含该字符串视图的最后n 个码点。
注意: 当n < 0 或n >size() 时,行为未定义。
该函数在 Qt 6.5 中引入。
另请参阅 first()、sliced()、chopped()、chop()、truncate()、slice() 以及Sizes and Sub-Strings 。
[constexpr noexcept] qsizetype QAnyStringView::length() const
与size() 相同。
提供此函数是为了与其他 Qt 容器保持兼容性。
另请参阅 size()。
[constexpr noexcept, since 6.8] qsizetype QAnyStringView::max_size() const
提供此函数是为了兼容 STL。
它返回字符串视图理论上能够表示的元素最大数量。实际上,该数值可能要小得多,具体取决于系统可用的内存量。
注意:返回值是 根据当前使用的字符类型计算得出的,因此在两个不同的视图上调用此函数可能会返回不同的结果。
该函数在 Qt 6.8 中引入。
[constexpr noexcept] qsizetype QAnyStringView::size() const
返回该字符串视图的大小,单位为该编码的码点。
另请参阅 empty()、isEmpty()、isNull()、size_bytes() 以及Sizes and Sub-Strings 。
[constexpr noexcept] qsizetype QAnyStringView::size_bytes() const
返回此字符串视图的大小,但以字节为单位,而非码点。
您可以将此函数与data()结合使用,用于哈希计算或序列化。
提供此函数是为了兼容 STL。
[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos, qsizetype n)
将此字符串视图修改为从位置pos 开始,并向后延伸n 个码点。
注意: 当pos < 0、n < 0 或pos +n >size() 时,行为 未定义。
该函数在 Qt 6.8 中引入。
另请参阅 sliced(),first(),last(),chopped(),chop(),truncate() 以及Sizes and Sub-Strings 。
[constexpr, since 6.8] QAnyStringView &QAnyStringView::slice(qsizetype pos)
修改此字符串视图,使其从位置pos 开始,并延伸至其末尾。
注意: 当pos < 0 或pos >size() 时,行为未定义。
这是一个重载函数。
该函数在 Qt 6.8 中引入。
另请参阅 sliced()、first()、last()、chopped()、chop()、truncate() 以及Sizes and Sub-Strings 。
[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos) const
返回一个字符串视图,该视图从该对象的pos 位置开始,一直延伸到其末尾。
注意: 当pos < 0 或pos >size() 时,行为未定义。
该函数在 Qt 6.5 中引入。
另请参见 first()、last()、chopped()、chop()、truncate()、slice() 以及Sizes and Sub-Strings 。
[constexpr, since 6.5] QAnyStringView QAnyStringView::sliced(qsizetype pos, qsizetype n) const
返回一个字符串视图,其中包含该字符串视图中从位置pos 开始的n 个码点。
注意: 当pos < 0、n < 0 或pos +n >size() 时,行为 未定义。
该函数在 Qt 6.5 中引入。
另请参阅 first()、last()、chopped()、chop()、truncate()、slice() 以及Sizes and Sub-Strings 。
QString QAnyStringView::toString() const
返回该字符串视图数据的深度拷贝,类型为QString 。
当且仅当该字符串视图为 null 时,返回值才会为 null 的 `QString `。
[constexpr, since 6.5] void QAnyStringView::truncate(qsizetype n)
将此字符串视图截断为n 个码点。
与 `*this = first(n)` 相同。
注意: 当n < 0 或n >size() 时,行为未定义。
该函数自 Qt 6.5 起引入。
另请参阅 sliced()、first()、last()、chopped()、chop() 以及Sizes and Sub-Strings 。
[constexpr] template <typename Visitor> decltype(auto) QAnyStringView::visit(Visitor &&v) const
根据该字符串视图所引用的字符串数据的编码,调用v 时,传入的参数为QUtf8StringView 、QLatin1String 或QStringView 之一。
大多数接受QAnyStringView 作为参数的函数都是通过以下方式拆分为针对不同编码的函数:
void processImpl(QLatin1String s) { ~~~ }
void processImpl(QUtf8StringView s) { ~~~ }
void processImpl(QStringView s) { ~~~ }
void process(QAnyStringView s)
{
s.visit([](auto s) { processImpl(s); });
}在此,我们同时将“s ”这一名称用于QAnyStringView 对象以及lambda表达式的参数。这是符合编程惯例的写法,有助于通过`visit()`调用追踪对象的身份,例如在更复杂的情况下,如
bool equal(QAnyStringView lhs, QAnyStringView rhs)
{
// assuming operator==(QAnyStringView, QAnyStringView) didn't, yet, exist:
return lhs.visit([rhs](auto lhs) {
rhs.visit([lhs](auto rhs) {
return lhs == rhs;
});
});
}visit() 要求所有 lambda 实例化都具有相同的返回类型。如果它们不同,即使存在共同类型,也会引发编译错误。要解决此问题,可以在 lambda 中使用显式返回类型,或在返回语句中进行类型转换:
// wrong:
QAnyStringView firstHalf(QAnyStringView input)
{
return input.visit([](auto input) { // ERROR: lambdas return different types
return input.sliced(0, input.size() / 2);
});
}
// correct:
QAnyStringView firstHalf(QAnyStringView input)
{
return input.visit([](auto input) -> QAnyStringView { // OK, explicit return type
return input.sliced(0, input.size() / 2);
});
}
// also correct:
QAnyStringView firstHalf(QAnyStringView input)
{
return input.visit([](auto input) {
return QAnyStringView(input.sliced(0, input.size() / 2)); // OK, cast to common type
});
}相关非成员
[noexcept] bool operator!=(const QAnyStringView &lhs, const QAnyStringView &rhs)
[noexcept] bool operator<(const QAnyStringView &lhs, const QAnyStringView &rhs)
[noexcept] bool operator<=(const QAnyStringView &lhs, const QAnyStringView &rhs)
[noexcept] bool operator==(const QAnyStringView &lhs, const QAnyStringView &rhs)
[noexcept] bool operator>(const QAnyStringView &lhs, const QAnyStringView &rhs)
[noexcept] bool operator>=(const QAnyStringView &lhs, const QAnyStringView &rhs)
将lhs 与rhs 进行比较的运算符。
另请参阅 compare()。
[since 6.7] QDebug operator<<(QDebug d, QAnyStringView s)
将s 输出到调试流d 。
如果 `d.quotedString() ` 为 `true`,则表示字符串采用哪种编码。若仅需字符串数据,请按如下方式使用 `visit()`:
s.visit([&d) (auto s) { d << s; });该函数在 Qt 6.7 中引入。
另请参阅 QAnyStringView::visit()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.