Visual Studio 调试过程查看QString类型值
在Visual Studio调试期间,QString类型想要在调试过程中进行显示需安装插件!
注意:此处提供不需要安装插件,直接配置natvis方式,从而调试QString。
【1】qt5.natvis
(1)找到qt5.nativs文件,建议使用everything查找。
(2)将此文件放置在C盘,当前用户目录\文档\Visual Studio 2017\Visualizers\
下。若无此文件夹请自行创建。
若安装的是VS2019,
则将Visual Studio 2017
替换为Visual Studio 2019
查找到对应路径放置。
(3)重启Visual Studio即可在调试时对QString类型进行查看。
(4)如果找不到此文件,可以新建然后拷贝如下内容:
1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- 3 **************************************************************************** 4 ** 5 ** Copyright (C) 2016 The Qt Company Ltd. 6 ** Contact: https://www.qt.io/licensing/ 7 ** 8 ** This file is part of the Qt VS Tools. 9 ** 10 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 11 ** Commercial License Usage 12 ** Licensees holding valid commercial Qt licenses may use this file in 13 ** accordance with the commercial license agreement provided with the 14 ** Software or, alternatively, in accordance with the terms contained in 15 ** a written agreement between you and The Qt Company. For licensing terms 16 ** and conditions see https://www.qt.io/terms-conditions. For further 17 ** information use the contact form at https://www.qt.io/contact-us. 18 ** 19 ** GNU General Public License Usage 20 ** Alternatively, this file may be used under the terms of the GNU 21 ** General Public License version 3 as published by the Free Software 22 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 23 ** included in the packaging of this file. Please review the following 24 ** information to ensure the GNU General Public License requirements will 25 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 26 ** 27 ** $QT_END_LICENSE$ 28 ** 29 **************************************************************************** 30 --> 31 32 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 33 34 <Type Name="QPoint"> 35 <AlternativeType Name="QPointF"/> 36 <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> 37 <Expand> 38 <Item Name="[x]">xp</Item> 39 <Item Name="[y]">yp</Item> 40 </Expand> 41 </Type> 42 43 <Type Name="QRect"> 44 <DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString> 45 <Expand> 46 <Item Name="[x]">x1</Item> 47 <Item Name="[y]">y1</Item> 48 <Item Name="[width]">x2 - x1 + 1</Item> 49 <Item Name="[height]">y2 - y1 + 1</Item> 50 </Expand> 51 </Type> 52 53 <Type Name="QRectF"> 54 <DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString> 55 <Expand> 56 <Item Name="[x]">xp</Item> 57 <Item Name="[y]">yp</Item> 58 <Item Name="[width]">w</Item> 59 <Item Name="[height]">h</Item> 60 </Expand> 61 </Type> 62 63 <Type Name="QSize"> 64 <AlternativeType Name="QSizeF"/> 65 <DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString> 66 <Expand> 67 <Item Name="[width]">wd</Item> 68 <Item Name="[height]">ht</Item> 69 </Expand> 70 </Type> 71 72 <Type Name="QLine"> 73 <AlternativeType Name="QLineF"/> 74 <DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString> 75 <Expand> 76 <Synthetic Name="[start point]"> 77 <DisplayString>{pt1}</DisplayString> 78 <Expand> 79 <ExpandedItem>pt1</ExpandedItem> 80 </Expand> 81 </Synthetic> 82 <Synthetic Name="[end point]"> 83 <DisplayString>{pt2}</DisplayString> 84 <Expand> 85 <ExpandedItem>pt2</ExpandedItem> 86 </Expand> 87 </Synthetic> 88 89 </Expand> 90 </Type> 91 92 <Type Name="QPolygon"> 93 <DisplayString>{{ size = {d->size} }}</DisplayString> 94 <Expand> 95 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 96 <ArrayItems> 97 <Size>d->size</Size> 98 <ValuePointer>(QPoint*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> 99 </ArrayItems> 100 </Expand> 101 </Type> 102 103 <Type Name="QPolygonF"> 104 <DisplayString>{{ size = {d->size} }}</DisplayString> 105 <Expand> 106 <Item Name="[closed]"> 107 d->size > 0 108 && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).xp 109 == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).xp) 110 && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).yp 111 == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).yp) 112 </Item> 113 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 114 <ArrayItems> 115 <Size>d->size</Size> 116 <ValuePointer>(QPointF*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> 117 </ArrayItems> 118 </Expand> 119 </Type> 120 121 <Type Name ="QVector2D"> 122 <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> 123 <Expand> 124 <Item Name="[x]">xp</Item> 125 <Item Name="[y]">yp</Item> 126 </Expand> 127 </Type> 128 129 <Type Name ="QVector3D"> 130 <DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString> 131 <Expand> 132 <Item Name="[x]">xp</Item> 133 <Item Name="[y]">yp</Item> 134 <Item Name="[z]">zp</Item> 135 </Expand> 136 </Type> 137 138 <Type Name ="QVector4D"> 139 <DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString> 140 <Expand> 141 <Item Name="[x]">xp</Item> 142 <Item Name="[y]">yp</Item> 143 <Item Name="[z]">zp</Item> 144 <Item Name="[w]">wp</Item> 145 </Expand> 146 </Type> 147 148 <Type Name ="QMatrix"> 149 <DisplayString> 150 {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }} 151 </DisplayString> 152 <Expand> 153 <Item Name="[m11]">_m11</Item> 154 <Item Name="[m12]">_m12</Item> 155 <Item Name="[m21]">_m21</Item> 156 <Item Name="[m22]">_m22</Item> 157 <Item Name="[dx]">_dx</Item> 158 <Item Name="[dy]">_dy</Item> 159 </Expand> 160 </Type> 161 162 <Type Name ="QMatrix4x4"> 163 <DisplayString> 164 {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} 165 </DisplayString> 166 <Expand> 167 <Item Name="[m11]">m[0][0]</Item> 168 <Item Name="[m12]">m[1][0]</Item> 169 <Item Name="[m13]">m[2][0]</Item> 170 <Item Name="[m14]">m[3][0]</Item> 171 <Item Name="[m21]">m[0][1]</Item> 172 <Item Name="[m22]">m[1][1]</Item> 173 <Item Name="[m23]">m[2][1]</Item> 174 <Item Name="[m24]">m[3][1]</Item> 175 <Item Name="[m31]">m[0][2]</Item> 176 <Item Name="[m32]">m[1][2]</Item> 177 <Item Name="[m33]">m[2][2]</Item> 178 <Item Name="[m34]">m[3][2]</Item> 179 <Item Name="[m41]">m[0][3]</Item> 180 <Item Name="[m42]">m[1][3]</Item> 181 <Item Name="[m43]">m[2][3]</Item> 182 <Item Name="[m44]">m[3][3]</Item> 183 </Expand> 184 </Type> 185 186 <Type Name="QSizePolicy"> 187 <DisplayString> 188 {{ horizontal = {static_cast<Policy>(bits.horPolicy)}, vertical = {static_cast<Policy>(bits.verPolicy)}, type = {ControlType(1 << bits.ctype)} }} 189 </DisplayString> 190 <Expand> 191 <Synthetic Name="[vertical policy]"> 192 <DisplayString>QSizePolicy::Policy::{static_cast<Policy>(bits.verPolicy)}</DisplayString> 193 </Synthetic> 194 <Synthetic Name="[horizontal policy]"> 195 <DisplayString>QSizePolicy::Policy::{static_cast<Policy>(bits.horPolicy)}</DisplayString> 196 </Synthetic> 197 <Synthetic Name="[control type]"> 198 <DisplayString>QSizePolicy::ControlType::{ControlType(1 << bits.ctype)}</DisplayString> 199 </Synthetic> 200 <Synthetic Name="[expanding directions]"> 201 <DisplayString 202 Condition="(static_cast<Policy>(bits.verPolicy) & ExpandFlag)"> 203 Qt::Vertical (2) 204 </DisplayString> 205 <DisplayString 206 Condition="(static_cast<Policy>(bits.horPolicy) & ExpandFlag)"> 207 Qt::Horizontal (1) 208 </DisplayString> 209 </Synthetic> 210 <Item Name="[vertical stretch]">static_cast<int>(bits.verStretch)</Item> 211 <Item Name="[horizontal stretch]">static_cast<int>(bits.horStretch)</Item> 212 <Item Name="[has height for width]">bits.hfw == 1</Item> 213 <Item Name="[has width for height]">bits.wfh == 1</Item> 214 </Expand> 215 </Type> 216 217 <Type Name="QChar"> 218 <DisplayString>{ucs,c}</DisplayString> 219 <StringView>ucs,c</StringView> 220 <Expand> 221 <Item Name="[latin 1]">ucs > 0xff ? '\0' : char(ucs),c</Item> 222 <Item Name="[unicode]">ucs,c</Item> 223 </Expand> 224 </Type> 225 226 <Type Name="QString"> 227 <DisplayString>{((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub}</DisplayString> 228 <StringView>((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub</StringView> 229 <Expand> 230 <Item Name="[size]">d->size</Item> 231 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 232 <ArrayItems> 233 <Size>d->size</Size> 234 <ValuePointer>((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),c</ValuePointer> 235 </ArrayItems> 236 </Expand> 237 </Type> 238 239 <Type Name="QByteArray"> 240 <DisplayString>{((reinterpret_cast<char*>(d)) + d->offset),sb}</DisplayString> 241 <StringView>((reinterpret_cast<char*>(d)) + d->offset),sb</StringView> 242 <Expand> 243 <Item Name="[size]">d->size</Item> 244 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 245 <ArrayItems> 246 <Size>d->size</Size> 247 <ValuePointer>((reinterpret_cast<char*>(d)) + d->offset),c</ValuePointer> 248 </ArrayItems> 249 </Expand> 250 </Type> 251 252 <Type Name="QBitArray"> 253 <DisplayString>{{ size = {(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)} }}</DisplayString> 254 <Expand> 255 <Item Name="[referenced]">d.d->ref.atomic._q_value</Item> 256 <IndexListItems> 257 <Size>(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)</Size> 258 <ValueNode> 259 (*(reinterpret_cast<const unsigned char*>((reinterpret_cast<char*>(d.d)) + d.d->offset) + 1 260 + ($i >> 3)) & (1 << ($i & 7))) != 0 261 </ValueNode> 262 </IndexListItems> 263 </Expand> 264 </Type> 265 266 <Type Name="QVarLengthArray<*>"> 267 <AlternativeType Name="QVarLengthArray<*, int>"/> 268 <DisplayString>{{ size = {s} }}</DisplayString> 269 <Expand> 270 <Item Name="[capacity]">a</Item> 271 <ArrayItems> 272 <Size>s</Size> 273 <ValuePointer>ptr</ValuePointer> 274 </ArrayItems> 275 </Expand> 276 </Type> 277 278 <Type Name="QDate"> 279 <DisplayString>{{ julian day = {jd} }}</DisplayString> 280 <Expand></Expand> 281 </Type> 282 283 <Type Name="QTime"> 284 <DisplayString 285 Condition="mds == 1">{{ millisecond = {mds} }}</DisplayString> 286 <DisplayString 287 Condition="mds != 1">{{ milliseconds = {mds} }}</DisplayString> 288 <Expand> 289 <Item Name="[hour]" 290 Condition="(mds / 3600000) == 1">mds / 3600000, d</Item> 291 <Item Name="[hours]" 292 Condition="(mds / 3600000) != 1">mds / 3600000, d</Item> 293 <Item Name="[minute]" 294 Condition="((mds % 3600000) / 60000) == 1">(mds % 3600000) / 60000, d</Item> 295 <Item Name="[minutes]" 296 Condition="((mds % 3600000) / 60000) != 1">(mds % 3600000) / 60000, d</Item> 297 <Item Name="[second]" 298 Condition="((mds / 1000) % 60) == 1">(mds / 1000) % 60, d</Item> 299 <Item Name="[seconds]" 300 Condition="((mds / 1000) % 60) != 1">(mds / 1000) % 60, d</Item> 301 <Item Name="[millisecond]" 302 Condition="(mds % 1000) == 1">mds % 1000, d</Item> 303 <Item Name="[milliseconds]" 304 Condition="(mds % 1000) != 1">mds % 1000, d</Item> 305 </Expand> 306 </Type> 307 308 <Type Name="QRegularExpression"> 309 <DisplayString>{d.pattern}</DisplayString> 310 </Type> 311 312 <Type Name="QSharedData"> 313 <Expand> 314 <Item Name="[referenced]">ref._q_value</Item> 315 </Expand> 316 </Type> 317 318 <Type Name="QSharedPointer<*>"> 319 <DisplayString>strong reference to shared pointer of type {"$T1"}</DisplayString> 320 <Expand> 321 <Item Name="[is null]">value == 0</Item> 322 <Item Name="[weak referenced]">d->weakref._q_value</Item> 323 <Item Name="[strong referenced]">d->strongref._q_value</Item> 324 </Expand> 325 </Type> 326 327 <Type Name="QSharedDataPointer<*>"> 328 <DisplayString>pointer to implicit shared object of type {"$T1"}</DisplayString> 329 <Expand> 330 <ExpandedItem>d</ExpandedItem> 331 </Expand> 332 </Type> 333 334 <Type Name="QExplicitlySharedDataPointer<*>"> 335 <DisplayString>pointer to explicit shared object of type {"$T1"}</DisplayString> 336 <Expand> 337 <ExpandedItem>d</ExpandedItem> 338 </Expand> 339 </Type> 340 341 <Type Name="QPointer<*>"> 342 <DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString> 343 <Expand> 344 <Item Name="[is null]">wp.d == 0 || wp.d->strongref._q_value == 0 || wp.value == 0</Item> 345 </Expand> 346 </Type> 347 348 <Type Name="QWeakPointer<*>"> 349 <DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString> 350 <Expand> 351 <Item Name="[is null]">d == 0 || d->strongref._q_value == 0 || value == 0</Item> 352 <Item Name="[weak referenced]">d->weakref._q_value</Item> 353 <Item Name="[strong referenced]">d->strongref._q_value</Item> 354 </Expand> 355 </Type> 356 357 <Type Name="QScopedPointer<*>"> 358 <DisplayString>scoped pointer to a dynamically allocated object of type {"$T1"}</DisplayString> 359 <Expand> 360 <Item Name="[is null]">!d</Item> 361 </Expand> 362 </Type> 363 364 <Type Name="QScopedArrayPointer<*>"> 365 <DisplayString>scoped pointer to dynamically allocated array of objects of type {"$T1"}</DisplayString> 366 <Expand> 367 <Item Name="[is null]">!d</Item> 368 </Expand> 369 </Type> 370 371 <Type Name="QPair<*,*>"> 372 <DisplayString>({first}, {second})</DisplayString> 373 <Expand> 374 <Item Name="[first]">first</Item> 375 <Item Name="[second]">second</Item> 376 </Expand> 377 </Type> 378 379 <Type Name="QVector<*>"> 380 <AlternativeType Name="QStack<*>"></AlternativeType> 381 <DisplayString>{{ size = {d->size} }}</DisplayString> 382 <Expand> 383 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 384 <ArrayItems> 385 <Size>d->size</Size> 386 <ValuePointer>($T1*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> 387 </ArrayItems> 388 </Expand> 389 </Type> 390 391 <Type Name="QList<*>"> 392 <AlternativeType Name="QStringList"></AlternativeType> 393 <AlternativeType Name="QQueue<*>"></AlternativeType> 394 <DisplayString>{{ size = {d->end - d->begin} }}</DisplayString> 395 <Expand> 396 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 397 <IndexListItems> 398 <Size>d->end - d->begin</Size> 399 <ValueNode>*reinterpret_cast<$T1*>((sizeof($T1) > sizeof(void*)) 400 ? reinterpret_cast<Node*>(d->array + d->begin + $i)->v 401 : reinterpret_cast<$T1*>(d->array + d->begin + $i)) 402 </ValueNode> 403 </IndexListItems> 404 </Expand> 405 </Type> 406 407 <Type Name="QLinkedList<*>"> 408 <DisplayString>{{ size = {d->size} }}</DisplayString> 409 <Expand> 410 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 411 <LinkedListItems> 412 <Size>d->size</Size> 413 <HeadPointer>d->n</HeadPointer> 414 <NextPointer>n</NextPointer> 415 <ValueNode>(*(QLinkedListNode<$T1>*)this).t</ValueNode> 416 </LinkedListItems> 417 </Expand> 418 </Type> 419 420 <Type Name="QMapNode<*,*>"> 421 <DisplayString>({key}, {value})</DisplayString> 422 <Expand> 423 <Item Name="[key]">key</Item> 424 <Item Name="[value]">value</Item> 425 </Expand> 426 </Type> 427 428 <Type Name="QMap<*,*>"> 429 <AlternativeType Name="QMultiMap<*,*>"/> 430 <DisplayString>{{ size = {d->size} }}</DisplayString> 431 <Expand> 432 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 433 <TreeItems> 434 <Size>d->size</Size> 435 <HeadPointer>d->header.left</HeadPointer> 436 <LeftPointer>left</LeftPointer> 437 <RightPointer>right</RightPointer> 438 <ValueNode>*((QMapNode<$T1,$T2>*)this)</ValueNode> 439 </TreeItems> 440 </Expand> 441 </Type> 442 443 <Type Name="QHashNode<*,*>"> 444 <DisplayString Condition="next == 0">(empty)</DisplayString> 445 <DisplayString Condition="next != 0">({key}, {value})</DisplayString> 446 <Expand> 447 <Item Name="[key]" Condition="next != 0">key</Item> 448 <Item Name="[value]" Condition="next != 0">value</Item> 449 </Expand> 450 </Type> 451 452 <Type Name="QHash<*,*>"> 453 <AlternativeType Name="QMultiHash<*,*>"/> 454 <DisplayString>{{ size = {d->size} }}</DisplayString> 455 <Expand> 456 <Item Name="[referenced]">d->ref.atomic._q_value</Item> 457 <IndexListItems> 458 <Size>d->numBuckets</Size> 459 <ValueNode>*((QHashNode<$T1,$T2>*)d->buckets[$i])</ValueNode> 460 </IndexListItems> 461 </Expand> 462 </Type> 463 464 <Type Name="QHashNode<*,QHashDummyValue>"> 465 <DisplayString Condition="next == 0">(empty)</DisplayString> 466 <DisplayString Condition="next != 0">({key})</DisplayString> 467 <Expand> 468 <Item Name="[key]" Condition="next != 0">key</Item> 469 </Expand> 470 </Type> 471 472 <Type Name="QSet<*>"> 473 <DisplayString>{{ size = {q_hash.d->size} }}</DisplayString> 474 <Expand> 475 <ExpandedItem>q_hash</ExpandedItem> 476 </Expand> 477 </Type> 478 479 <Type Name="QCache<*,*>::Node"> 480 <DisplayString>({*keyPtr}, {*t})</DisplayString> 481 <Expand> 482 <Item Name="[key]">*keyPtr</Item> 483 <Item Name="[value]">*t</Item> 484 </Expand> 485 </Type> 486 487 <Type Name="QCache<*,*>"> 488 <DisplayString>{{ size = {hash.d->size} }}</DisplayString> 489 <Expand> 490 <Item Name="[max coast]">mx</Item> 491 <Item Name="[total coast]">total</Item> 492 <Item Name="[referenced]">hash.d->ref.atomic._q_value</Item> 493 <LinkedListItems> 494 <Size>hash.d->size</Size> 495 <HeadPointer>f</HeadPointer> 496 <NextPointer>n</NextPointer> 497 <ValueNode>*((Node*)this)</ValueNode> 498 </LinkedListItems> 499 </Expand> 500 </Type> 501 502 <Type Name="QVariant"> 503 <!--Region DisplayString QVariant--> 504 505 <DisplayString Condition="d.type == QMetaType::UnknownType">Invalid</DisplayString> 506 <DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString> 507 <DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString> 508 <DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString> 509 <DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString> 510 <DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString> 511 <DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString> 512 <DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString> 513 <DisplayString Condition="d.type == QMetaType::QVariantMap"> 514 {*((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr 515 : reinterpret_cast<const void *>(&d.data.ptr)))} 516 </DisplayString> 517 <DisplayString Condition="d.type == QMetaType::QVariantList"> 518 {*((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr 519 : reinterpret_cast<const void *>(&d.data.ptr)))} 520 </DisplayString> 521 <DisplayString Condition="d.type == QMetaType::QString"> 522 {*((QString*)(d.is_shared ? d.data.shared->ptr 523 : reinterpret_cast<const void *>(&d.data.ptr)))} 524 </DisplayString> 525 <DisplayString Condition="d.type == QMetaType::QStringList"> 526 {*((QStringList*)(d.is_shared ? d.data.shared->ptr 527 : reinterpret_cast<const void *>(&d.data.ptr)))} 528 </DisplayString> 529 <DisplayString Condition="d.type == QMetaType::QByteArray"> 530 {*((QByteArray*)(d.is_shared ? d.data.shared->ptr 531 : reinterpret_cast<const void *>(&d.data.ptr)))} 532 </DisplayString> 533 <DisplayString Condition="d.type == QMetaType::QBitArray"> 534 {*((QBitArray*)(d.is_shared ? d.data.shared->ptr 535 : reinterpret_cast<const void *>(&d.data.ptr)))} 536 </DisplayString> 537 <DisplayString Condition="d.type == QMetaType::QDate"> 538 {*((QDate*)(d.is_shared ? d.data.shared->ptr 539 : reinterpret_cast<const void *>(&d.data.ptr)))} 540 </DisplayString> 541 <DisplayString Condition="d.type == QMetaType::QTime"> 542 {*((QTime*)(d.is_shared ? d.data.shared->ptr 543 : reinterpret_cast<const void *>(&d.data.ptr)))} 544 </DisplayString> 545 <DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString> 546 <DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString> 547 <DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString> 548 <DisplayString Condition="d.type == QMetaType::QRect"> 549 {*((QRect*)(d.is_shared ? d.data.shared->ptr 550 : reinterpret_cast<const void *>(&d.data.ptr)))} 551 </DisplayString> 552 <DisplayString Condition="d.type == QMetaType::QRectF"> 553 {*((QRectF*)(d.is_shared ? d.data.shared->ptr 554 : reinterpret_cast<const void *>(&d.data.ptr)))} 555 </DisplayString> 556 <DisplayString Condition="d.type == QMetaType::QSize"> 557 {*((QSize*)(d.is_shared ? d.data.shared->ptr 558 : reinterpret_cast<const void *>(&d.data.ptr)))} 559 </DisplayString> 560 <DisplayString Condition="d.type == QMetaType::QSizeF"> 561 {*((QSizeF*)(d.is_shared ? d.data.shared->ptr 562 : reinterpret_cast<const void *>(&d.data.ptr)))} 563 </DisplayString> 564 <DisplayString Condition="d.type == QMetaType::QLine"> 565 {*((QLine*)(d.is_shared ? d.data.shared->ptr 566 : reinterpret_cast<const void *>(&d.data.ptr)))} 567 </DisplayString> 568 <DisplayString Condition="d.type == QMetaType::QLineF"> 569 {*((QLineF*)(d.is_shared ? d.data.shared->ptr 570 : reinterpret_cast<const void *>(&d.data.ptr)))} 571 </DisplayString> 572 <DisplayString Condition="d.type == QMetaType::QPoint"> 573 {*((QPoint*)(d.is_shared ? d.data.shared->ptr 574 : reinterpret_cast<const void *>(&d.data.ptr)))} 575 </DisplayString> 576 <DisplayString Condition="d.type == QMetaType::QPointF"> 577 {*((QPointF*)(d.is_shared ? d.data.shared->ptr 578 : reinterpret_cast<const void *>(&d.data.ptr)))} 579 </DisplayString> 580 <DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString> 581 <DisplayString Condition="d.type == QMetaType::QRegularExpression">RegularExpression</DisplayString> 582 <DisplayString Condition="d.type == QMetaType::QVariantHash"> 583 {*((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr 584 : reinterpret_cast<const void *>(&d.data.ptr)))} 585 </DisplayString> 586 <DisplayString Condition="d.type == QMetaType::QEasingCurve">EasingCurve</DisplayString> 587 <DisplayString Condition="d.type == QMetaType::QUuid">Uuid</DisplayString> 588 <DisplayString Condition="d.type == QMetaType::QModelIndex">ModelIndex</DisplayString> 589 <DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</DisplayString> 590 <DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString> 591 <DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString> 592 <DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString> 593 <DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString> 594 <DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString> 595 <DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString> 596 <DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString> 597 <DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString> 598 <DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString> 599 <DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString> 600 <DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString> 601 <DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString> 602 <DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString> 603 <DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString> 604 <DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString> 605 <DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString> 606 <DisplayString Condition="d.type == QMetaType::QMatrix4x4">Matrix4x4</DisplayString> 607 <DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString> 608 <DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString> 609 <DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString> 610 <DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString> 611 <DisplayString Condition="d.type == QMetaType::QPolygonF">PolygonF</DisplayString> 612 <DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString> 613 <DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</DisplayString> 614 <DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString> 615 <DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString> 616 <DisplayString Condition="d.type == 0xffffffff">LastType</DisplayString> 617 618 <!--End region DisplayString QVariant--> 619 620 <!--Region DisplayView QVariant--> 621 622 <StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView> 623 624 <StringView Condition="d.type == QMetaType::QString"> 625 *((QString*)(d.is_shared ? d.data.shared->ptr 626 : reinterpret_cast<const void *>(&d.data.ptr))) 627 </StringView> 628 629 <StringView Condition="d.type == QMetaType::QByteArray"> 630 *((QByteArray*)(d.is_shared ? d.data.shared->ptr 631 : reinterpret_cast<const void *>(&d.data.ptr))) 632 </StringView> 633 634 <!--End region DisplayView QVariant--> 635 636 <!--Region Expand QVariant--> 637 638 <Expand> 639 <ExpandedItem Condition="d.type == QMetaType::QVariantMap"> 640 *((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr 641 : reinterpret_cast<const void *>(&d.data.ptr))) 642 </ExpandedItem> 643 <ExpandedItem Condition="d.type == QMetaType::QVariantList"> 644 *((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr 645 : reinterpret_cast<const void *>(&d.data.ptr))) 646 </ExpandedItem> 647 <ExpandedItem Condition="d.type == QMetaType::QString"> 648 *((QString*)(d.is_shared ? d.data.shared->ptr 649 : reinterpret_cast<const void *>(&d.data.ptr))) 650 </ExpandedItem> 651 <ExpandedItem Condition="d.type == QMetaType::QStringList"> 652 *((QStringList*)(d.is_shared ? d.data.shared->ptr 653 : reinterpret_cast<const void *>(&d.data.ptr))) 654 </ExpandedItem> 655 <ExpandedItem Condition="d.type == QMetaType::QByteArray"> 656 *((QByteArray*)(d.is_shared ? d.data.shared->ptr 657 : reinterpret_cast<const void *>(&d.data.ptr))) 658 </ExpandedItem> 659 <ExpandedItem Condition="d.type == QMetaType::QBitArray"> 660 *((QBitArray*)(d.is_shared ? d.data.shared->ptr 661 : reinterpret_cast<const void *>(&d.data.ptr))) 662 </ExpandedItem> 663 <ExpandedItem Condition="d.type == QMetaType::QDate"> 664 *((QDate*)(d.is_shared ? d.data.shared->ptr 665 : reinterpret_cast<const void *>(&d.data.ptr))) 666 </ExpandedItem> 667 <ExpandedItem Condition="d.type == QMetaType::QTime"> 668 *((QTime*)(d.is_shared ? d.data.shared->ptr 669 : reinterpret_cast<const void *>(&d.data.ptr))) 670 </ExpandedItem> 671 <ExpandedItem Condition="d.type == QMetaType::QRect"> 672 *((QRect*)(d.is_shared ? d.data.shared->ptr 673 : reinterpret_cast<const void *>(&d.data.ptr))) 674 </ExpandedItem> 675 <ExpandedItem Condition="d.type == QMetaType::QRectF"> 676 *((QRectF*)(d.is_shared ? d.data.shared->ptr 677 : reinterpret_cast<const void *>(&d.data.ptr))) 678 </ExpandedItem> 679 <ExpandedItem Condition="d.type == QMetaType::QSize"> 680 *((QSize*)(d.is_shared ? d.data.shared->ptr 681 : reinterpret_cast<const void *>(&d.data.ptr))) 682 </ExpandedItem> 683 <ExpandedItem Condition="d.type == QMetaType::QSizeF"> 684 *((QSizeF*)(d.is_shared ? d.data.shared->ptr 685 : reinterpret_cast<const void *>(&d.data.ptr))) 686 </ExpandedItem> 687 <ExpandedItem Condition="d.type == QMetaType::QLine"> 688 *((QLine*)(d.is_shared ? d.data.shared->ptr 689 : reinterpret_cast<const void *>(&d.data.ptr))) 690 </ExpandedItem> 691 <ExpandedItem Condition="d.type == QMetaType::QLineF"> 692 *((QLineF*)(d.is_shared ? d.data.shared->ptr 693 : reinterpret_cast<const void *>(&d.data.ptr))) 694 </ExpandedItem> 695 <ExpandedItem Condition="d.type == QMetaType::QPoint"> 696 *((QPoint*)(d.is_shared ? d.data.shared->ptr 697 : reinterpret_cast<const void *>(&d.data.ptr))) 698 </ExpandedItem> 699 <ExpandedItem Condition="d.type == QMetaType::QPointF"> 700 *((QPointF*)(d.is_shared ? d.data.shared->ptr 701 : reinterpret_cast<const void *>(&d.data.ptr))) 702 </ExpandedItem> 703 <ExpandedItem Condition="d.type == QMetaType::QVariantHash"> 704 *((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr 705 : reinterpret_cast<const void *>(&d.data.ptr))) 706 </ExpandedItem> 707 </Expand> 708 709 <!--End region Expand QVariant--> 710 </Type> 711 712 </AutoVisualizer>
【2】效果图
good good study, day day up.
顺序 选择 循环 总结