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-&gt;size} }}</DisplayString>
 94         <Expand>
 95             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
 96             <ArrayItems>
 97                 <Size>d-&gt;size</Size>
 98                 <ValuePointer>(QPoint*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
 99             </ArrayItems>
100         </Expand>
101     </Type>
102 
103     <Type Name="QPolygonF">
104         <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
105         <Expand>
106             <Item Name="[closed]">
107                 d-&gt;size &gt; 0
108                     &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).xp
109                 == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).xp)
110                     &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).yp
111                 == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).yp)
112             </Item>
113             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
114             <ArrayItems>
115                 <Size>d-&gt;size</Size>
116                 <ValuePointer>(QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;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&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }}
189         </DisplayString>
190         <Expand>
191             <Synthetic Name="[vertical policy]">
192                 <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.verPolicy)}</DisplayString>
193             </Synthetic>
194             <Synthetic Name="[horizontal policy]">
195                 <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.horPolicy)}</DisplayString>
196             </Synthetic>
197             <Synthetic Name="[control type]">
198                 <DisplayString>QSizePolicy::ControlType::{ControlType(1 &lt;&lt; bits.ctype)}</DisplayString>
199             </Synthetic>
200             <Synthetic Name="[expanding directions]">
201                 <DisplayString
202                     Condition="(static_cast&lt;Policy&gt;(bits.verPolicy) &amp; ExpandFlag)">
203                         Qt::Vertical (2)
204                     </DisplayString>
205                 <DisplayString
206                     Condition="(static_cast&lt;Policy&gt;(bits.horPolicy) &amp; ExpandFlag)">
207                         Qt::Horizontal (1)
208                 </DisplayString>
209             </Synthetic>
210             <Item Name="[vertical stretch]">static_cast&lt;int&gt;(bits.verStretch)</Item>
211             <Item Name="[horizontal stretch]">static_cast&lt;int&gt;(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&lt;unsigned short*&gt;(d)) + d->offset / 2),sub}</DisplayString>
228         <StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub</StringView>
229         <Expand>
230             <Item Name="[size]">d-&gt;size</Item>
231             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
232             <ArrayItems>
233                 <Size>d-&gt;size</Size>
234                 <ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),c</ValuePointer>
235             </ArrayItems>
236         </Expand>
237     </Type>
238 
239     <Type Name="QByteArray">
240         <DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb}</DisplayString>
241         <StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb</StringView>
242         <Expand>
243             <Item Name="[size]">d-&gt;size</Item>
244             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
245             <ArrayItems>
246                 <Size>d-&gt;size</Size>
247                 <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),c</ValuePointer>
248             </ArrayItems>
249         </Expand>
250     </Type>
251 
252     <Type Name="QBitArray">
253         <DisplayString>{{ size = {(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)} }}</DisplayString>
254         <Expand>
255             <Item Name="[referenced]">d.d-&gt;ref.atomic._q_value</Item>
256             <IndexListItems>
257                 <Size>(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)</Size>
258                 <ValueNode>
259                     (*(reinterpret_cast&lt;const unsigned char*&gt;((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset) + 1
260                         + ($i &gt;&gt; 3)) &amp; (1 &lt;&lt; ($i &amp; 7))) != 0
261                 </ValueNode>
262             </IndexListItems>
263         </Expand>
264     </Type>
265 
266     <Type Name="QVarLengthArray&lt;*&gt;">
267         <AlternativeType Name="QVarLengthArray&lt;*, int&gt;"/>
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&lt;*&gt;">
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-&gt;weakref._q_value</Item>
323             <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
324         </Expand>
325     </Type>
326 
327     <Type Name="QSharedDataPointer&lt;*&gt;">
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&lt;*&gt;">
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&lt;*&gt;">
342         <DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString>
343         <Expand>
344             <Item Name="[is null]">wp.d == 0 || wp.d-&gt;strongref._q_value == 0 || wp.value == 0</Item>
345         </Expand>
346     </Type>
347 
348     <Type Name="QWeakPointer&lt;*&gt;">
349         <DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString>
350         <Expand>
351             <Item Name="[is null]">d == 0 || d-&gt;strongref._q_value == 0 || value == 0</Item>
352             <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
353             <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
354         </Expand>
355     </Type>
356 
357     <Type Name="QScopedPointer&lt;*&gt;">
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&lt;*&gt;">
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&lt;*,*&gt;">
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&lt;*&gt;">
380         <AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
381         <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
382         <Expand>
383             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
384             <ArrayItems>
385                 <Size>d-&gt;size</Size>
386                 <ValuePointer>($T1*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
387             </ArrayItems>
388         </Expand>
389     </Type>
390 
391     <Type Name="QList&lt;*&gt;">
392         <AlternativeType Name="QStringList"></AlternativeType>
393         <AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
394         <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
395         <Expand>
396             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
397             <IndexListItems>
398                 <Size>d-&gt;end - d-&gt;begin</Size>
399                 <ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; sizeof(void*))
400                     ? reinterpret_cast&lt;Node*&gt;(d->array + d->begin + $i)->v
401                     : reinterpret_cast&lt;$T1*&gt;(d->array + d->begin + $i))
402                 </ValueNode>
403             </IndexListItems>
404         </Expand>
405     </Type>
406 
407     <Type Name="QLinkedList&lt;*&gt;">
408         <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
409         <Expand>
410             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
411             <LinkedListItems>
412                 <Size>d-&gt;size</Size>
413                 <HeadPointer>d-&gt;n</HeadPointer>
414                 <NextPointer>n</NextPointer>
415                 <ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
416             </LinkedListItems>
417         </Expand>
418     </Type>
419 
420     <Type Name="QMapNode&lt;*,*&gt;">
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&lt;*,*&gt;">
429         <AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
430         <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
431         <Expand>
432             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
433             <TreeItems>
434                 <Size>d-&gt;size</Size>
435                 <HeadPointer>d-&gt;header.left</HeadPointer>
436                 <LeftPointer>left</LeftPointer>
437                 <RightPointer>right</RightPointer>
438                 <ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
439             </TreeItems>
440         </Expand>
441     </Type>
442 
443     <Type Name="QHashNode&lt;*,*&gt;">
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&lt;*,*&gt;">
453         <AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
454         <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
455         <Expand>
456             <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
457             <IndexListItems>
458                 <Size>d-&gt;numBuckets</Size>
459                 <ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
460             </IndexListItems>
461         </Expand>
462     </Type>
463 
464     <Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
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&lt;*&gt;">
473         <DisplayString>{{ size = {q_hash.d-&gt;size} }}</DisplayString>
474         <Expand>
475             <ExpandedItem>q_hash</ExpandedItem>
476         </Expand>
477     </Type>
478 
479     <Type Name="QCache&lt;*,*&gt;::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&lt;*,*&gt;">
488         <DisplayString>{{ size = {hash.d-&gt;size} }}</DisplayString>
489         <Expand>
490             <Item Name="[max coast]">mx</Item>
491             <Item Name="[total coast]">total</Item>
492             <Item Name="[referenced]">hash.d-&gt;ref.atomic._q_value</Item>
493             <LinkedListItems>
494                 <Size>hash.d-&gt;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&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
515                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
516         </DisplayString>
517         <DisplayString Condition="d.type == QMetaType::QVariantList">
518             {*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
519                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
520         </DisplayString>
521         <DisplayString Condition="d.type == QMetaType::QString">
522             {*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
523                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
524         </DisplayString>
525         <DisplayString Condition="d.type == QMetaType::QStringList">
526             {*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
527                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
528         </DisplayString>
529         <DisplayString Condition="d.type == QMetaType::QByteArray">
530             {*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
531                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
532         </DisplayString>
533         <DisplayString Condition="d.type == QMetaType::QBitArray">
534             {*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
535                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
536         </DisplayString>
537         <DisplayString Condition="d.type == QMetaType::QDate">
538             {*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
539                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
540         </DisplayString>
541         <DisplayString Condition="d.type == QMetaType::QTime">
542             {*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
543                 : reinterpret_cast&lt;const void *&gt;(&amp;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-&gt;ptr
550                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
551         </DisplayString>
552         <DisplayString Condition="d.type == QMetaType::QRectF">
553             {*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
554                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
555         </DisplayString>
556         <DisplayString Condition="d.type == QMetaType::QSize">
557             {*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
558                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
559         </DisplayString>
560         <DisplayString Condition="d.type == QMetaType::QSizeF">
561             {*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
562                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
563         </DisplayString>
564         <DisplayString Condition="d.type == QMetaType::QLine">
565             {*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
566                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
567         </DisplayString>
568         <DisplayString Condition="d.type == QMetaType::QLineF">
569             {*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
570                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
571         </DisplayString>
572         <DisplayString Condition="d.type == QMetaType::QPoint">
573             {*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
574                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
575         </DisplayString>
576         <DisplayString Condition="d.type == QMetaType::QPointF">
577             {*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
578                 : reinterpret_cast&lt;const void *&gt;(&amp;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&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
584                 : reinterpret_cast&lt;const void *&gt;(&amp;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-&gt;ptr
626                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
627         </StringView>
628 
629         <StringView Condition="d.type == QMetaType::QByteArray">
630             *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
631                 : reinterpret_cast&lt;const void *&gt;(&amp;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&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
641                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
642             </ExpandedItem>
643             <ExpandedItem Condition="d.type == QMetaType::QVariantList">
644                 *((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
645                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
646             </ExpandedItem>
647             <ExpandedItem Condition="d.type == QMetaType::QString">
648                 *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
649                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
650             </ExpandedItem>
651             <ExpandedItem Condition="d.type == QMetaType::QStringList">
652                 *((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
653                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
654             </ExpandedItem>
655             <ExpandedItem Condition="d.type == QMetaType::QByteArray">
656                 *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
657                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
658             </ExpandedItem>
659             <ExpandedItem Condition="d.type == QMetaType::QBitArray">
660                 *((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
661                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
662             </ExpandedItem>
663             <ExpandedItem Condition="d.type == QMetaType::QDate">
664                 *((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
665                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
666             </ExpandedItem>
667             <ExpandedItem Condition="d.type == QMetaType::QTime">
668                 *((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
669                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
670             </ExpandedItem>
671             <ExpandedItem Condition="d.type == QMetaType::QRect">
672                 *((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
673                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
674             </ExpandedItem>
675             <ExpandedItem Condition="d.type == QMetaType::QRectF">
676                 *((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
677                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
678             </ExpandedItem>
679             <ExpandedItem Condition="d.type == QMetaType::QSize">
680                 *((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
681                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
682             </ExpandedItem>
683             <ExpandedItem Condition="d.type == QMetaType::QSizeF">
684                 *((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
685                 : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
686             </ExpandedItem>
687             <ExpandedItem Condition="d.type == QMetaType::QLine">
688                 *((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
689                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
690             </ExpandedItem>
691             <ExpandedItem Condition="d.type == QMetaType::QLineF">
692                 *((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
693                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
694             </ExpandedItem>
695             <ExpandedItem Condition="d.type == QMetaType::QPoint">
696                 *((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
697                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
698             </ExpandedItem>
699             <ExpandedItem Condition="d.type == QMetaType::QPointF">
700                 *((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
701                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
702             </ExpandedItem>
703             <ExpandedItem Condition="d.type == QMetaType::QVariantHash">
704                 *((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
705                     : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
706             </ExpandedItem>
707         </Expand>
708 
709         <!--End region Expand QVariant-->
710     </Type>
711 
712 </AutoVisualizer>
View Code

 【2】效果图

 

 

good good study, day day up.

顺序 选择 循环 总结

posted @ 2020-11-09 22:05  kaizenly  阅读(3353)  评论(0编辑  收藏  举报
打赏