qml Qt.size(0,0)== QSizeF(0, 0)为什么返回false
时间: 2024-04-21 11:12:23 浏览: 17
在Qt QML中,`Qt.size()`返回的是一个`QSizeF`类型的对象,而`QSizeF`是一个浮点数类型的二维尺寸。因此,`Qt.size(0,0)`返回的是一个宽度和高度均为0的`QSizeF`类型对象。
当比较`Qt.size(0,0)`和`QSizeF(0,0)`时,返回值应该是`true`的,因为它们代表了相同的二维尺寸。但是,如果返回了`false`,可能有以下几种可能:
1. `QSizeF`的构造函数可能在初始化过程中进行了某些处理,导致它们的值不完全相等。
2. `Qt.size()`函数可能返回一个不是`QSizeF`类型的对象,而是一个自定义的类型,导致比较结果不正确。
3. 在比较过程中可能出现了错误,例如传递参数错误或者使用了错误的运算符等。
因此,建议使用`QSizeF(0,0)`来表示宽度和高度均为0的二维尺寸对象,以避免比较错误。
相关问题
QML Qt.size(0,0)为什么会变成QSizeF(0, 0)
在 QML 中,`Qt.size()` 是一个函数,用于创建 `QSize` 类型的对象。而 `QSizeF` 类型是 `QSize` 类型的子类,它们之间可以进行隐式类型转换。
因此,当你使用 `Qt.size(0,0)` 创建一个 `QSize` 对象时,它会自动进行类型转换,变成一个 `QSizeF` 对象,其实质是 `QSizeF(0, 0)`。如果你需要使用 `QSize` 类型的对象,可以显式地将其转换为 `QSize` 类型:`Qt.size(0,0).toSize()`。
==9114== HEAP SUMMARY: ==9114== in use at exit: 14,336,980 bytes in 90,048 blocks ==9114== total heap usage: 428,295 allocs, 338,247 frees, 58,358,339 bytes allocated ==9114== ==9114== 0 bytes in 1 blocks are still reachable in loss record 1 of 25,502 ==9114== at 0x4C3289F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==9114== by 0x66F9EBA: QV4::CompiledData::CompilationUnit::linkToEngine(QV4::ExecutionEngine*) (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Qml.so.5.12.9) ==9114== by 0x6904054: QQmlObjectCreator::init(QQmlContextData*) (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Qml.so.5.12.9) ==9114== by 0x6904202: QQmlObjectCreator::QQmlObjectCreator(QQmlContextData*, QQmlRefPointer<QV4::CompiledData::CompilationUnit> const&, QQmlContextData*, QQmlIncubatorPrivate*) (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Qml.so.5.12.9) ==9114== by 0x688E2E1: QQmlComponentPrivate::beginCreate(QQmlContextData*) (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Qml.so.5.12.9) ==9114== by 0x688BE48: QQmlComponent::create(QQmlContext*) (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Qml.so.5.12.9) ==9114== by 0x4E49D6E: QQuickWidget::continueExecute() (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5QuickWidgets.so.5.12.9) ==9114== by 0x4E4A18A: QQuickWidgetPrivate::execute() (in /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5QuickWidgets.so.5.12.9) ==9114== by 0x1397D2: TWDZVirtualKeyboard::TWDZVirtualKeyboard() (twdzvirtualkeyboard.cpp:24) ==9114== by 0x13965E: TWDZVirtualKeyboard::GetInstance() (twdzvirtualkeyboard.cpp:8) ==9114== by 0x136629: UartTest::UartTest(int, int, QWidget*) (uarttest.cpp:18) ==9114== by 0x136157: communicationModule::initUi() (communicationmodule.cpp:11)
这是 Valgrind 的 HEAP SUMMARY 部分的输出,它显示程序在退出时堆的使用情况。具体来说,它提供了以下信息:
- "in use at exit":退出时在堆上仍然使用的字节数和块数。
- "total heap usage":程序整个运行期间在堆上分配、释放的字节数和块数。
- "0 bytes in 1 blocks are still reachable":这是一个 loss record,表示在程序退出时,有一个块没有被释放,但是指针仍然可以访问到该块。在这个例子中,这个块是由 `operator new[]` 分配的,由 Qt5Qml 库的 `QQmlObjectCreator::init()` 函数链接到引擎中。这并不一定是一个内存泄漏,因为程序结束时操作系统会自动释放所有未释放的内存。但是,如果这些内存块是在一个长时间运行的程序中分配的,可能会导致内存泄漏。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)