VS2019使用Qt4.8.7
阅读原文时间:2023年07月11日阅读:2
  1. 取消系统变量中的Qt_INCLUDEPATH_

  2. C:\Users\octob\AppData\Local\QtMsBuild中添加qt4.natvis.xmlqt4.natvis for visual studio 2015 for qt4 I verified QString, QVector, QList, QPolygon, QVariant, QHash, QMap,… (github.com)

  3. Qt VS Tools中添加487版本。

  4. 新建Qt项目,选择487。

  5. 使用的是Vs2019的Qt VS Tools插件,和487有兼容性问题,对moc和rcc的一些选项不支持:

    • Qt Resource Compiler

      rcc:移除Initialization Function Name=%(Filename)

    • Qt Meta-Object Compiler

      moc:移除Prepend Include中的stdafx.h

  6. 修改代码,简单讲就是把QtWidgets改成QtGui

    • stdafx.h

      #include <Qt/QtGui>
    • QtWidgetsApp_487.h

      #include <QtGui/QMainWindow>
    • main.cpp

      #include <QtGui/QApplication>
  7. Qt Resource Compiler

    rcc:移除Initialization Function Name=%(Filename)




natis文件

vscode-qt-tools/qt.natvis.xml at develop · tonka3000/vscode-qt-tools (github.com)

VisualStudio-Snippets/Qt4.natvis at master · NobodysNightmare/VisualStudio-Snippets (github.com)

qt4.natvis for visual studio 2015 for qt4 I verified QString, QVector, QList, QPolygon, QVariant, QHash, QMap,… (github.com)

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

    <Type Name="QPoint">
        <AlternativeType Name="QPointF"/>
        <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
        <Expand>
            <Item Name="[x]">xp</Item>
            <Item Name="[y]">yp</Item>
        </Expand>
    </Type>

    <Type Name="QRect">
        <DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString>
        <Expand>
            <Item Name="[x]">x1</Item>
            <Item Name="[y]">y1</Item>
            <Item Name="[width]">x2 - x1 + 1</Item>
            <Item Name="[height]">y2 - y1 + 1</Item>
        </Expand>
    </Type>

    <Type Name="QRectF">
        <DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString>
        <Expand>
            <Item Name="[x]">xp</Item>
            <Item Name="[y]">yp</Item>
            <Item Name="[width]">w</Item>
            <Item Name="[height]">h</Item>
        </Expand>
    </Type>

    <Type Name="QSize">
        <AlternativeType Name="QSizeF"/>
        <DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString>
        <Expand>
            <Item Name="[width]">wd</Item>
            <Item Name="[height]">ht</Item>
        </Expand>
    </Type>

    <Type Name="QLine">
        <AlternativeType Name="QLineF"/>
        <DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString>
        <Expand>
            <Synthetic Name="[start point]">
                <DisplayString>{pt1}</DisplayString>
                <Expand>
                    <ExpandedItem>pt1</ExpandedItem>
                </Expand>
            </Synthetic>
            <Synthetic Name="[end point]">
                <DisplayString>{pt2}</DisplayString>
                <Expand>
                    <ExpandedItem>pt2</ExpandedItem>
                </Expand>
            </Synthetic>

        </Expand>
    </Type>

    <Type Name="QPolygon">
        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <ArrayItems>
                <Size>d-&gt;size</Size>
                <ValuePointer>(QPoint*)(reinterpret_cast&lt;char*&gt;(p-&gt;array))</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

    <Type Name ="QMatrix">
        <DisplayString>
            {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }}
        </DisplayString>
        <Expand>
            <Item Name="[m11]">_m11</Item>
            <Item Name="[m12]">_m12</Item>
            <Item Name="[m21]">_m21</Item>
            <Item Name="[m22]">_m22</Item>
            <Item Name="[dx]">_dx</Item>
            <Item Name="[dy]">_dy</Item>
        </Expand>
    </Type>

    <Type Name="QSizePolicy">
        <DisplayString>
            {{ horizontal = {static_cast&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }}
        </DisplayString>
        <Expand>
            <Synthetic Name="[vertical policy]">
                <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.verPolicy)}</DisplayString>
            </Synthetic>
            <Synthetic Name="[horizontal policy]">
                <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.horPolicy)}</DisplayString>
            </Synthetic>
            <Synthetic Name="[control type]">
                <DisplayString>QSizePolicy::ControlType::{ControlType(1 &lt;&lt; bits.ctype)}</DisplayString>
            </Synthetic>
            <Synthetic Name="[expanding directions]">
                <DisplayString
                    Condition="(static_cast&lt;Policy&gt;(bits.verPolicy) &amp; ExpandFlag)">
                        Qt::Vertical (2)
                    </DisplayString>
                <DisplayString
                    Condition="(static_cast&lt;Policy&gt;(bits.horPolicy) &amp; ExpandFlag)">
                        Qt::Horizontal (1)
                </DisplayString>
            </Synthetic>
            <Item Name="[vertical stretch]">static_cast&lt;int&gt;(bits.verStretch)</Item>
            <Item Name="[horizontal stretch]">static_cast&lt;int&gt;(bits.horStretch)</Item>
            <Item Name="[has height for width]">bits.hfw == 1</Item>
            <Item Name="[has width for height]">bits.wfh == 1</Item>
        </Expand>
    </Type>

    <Type Name="QChar">
        <DisplayString>{ucs,c}</DisplayString>
        <StringView>ucs,c</StringView>
        <Expand>
            <Item Name="[latin 1]">ucs > 0xff ? '\0' : char(ucs),c</Item>
            <Item Name="[unicode]">ucs,c</Item>
        </Expand>
    </Type>

    <Type Name="QString">
        <DisplayString>{d-&gt;data,sub}</DisplayString>
        <StringView>d-&gt;data,sub</StringView>
        <Expand>
            <Item Name="[size]">d-&gt;size</Item>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <ArrayItems>
                <Size>d-&gt;size</Size>
                <ValuePointer>d-&gt;data,c</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

    <!--<Type Name="QByteArray">
        --><!--<DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;data),sb}</DisplayString>
        <StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;data),sb</StringView>--><!--
        <Expand>
            <Item Name="[size]">d-&gt;size</Item>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            --><!--<ArrayItems>
                <Size>d-&gt;size</Size>
                <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;data),c</ValuePointer>
            </ArrayItems>--><!--
        </Expand>
    </Type>-->

    <!--<Type Name="QBitArray">
        <DisplayString>{{ size = {(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d.d-&gt;ref._q_value</Item>
            <IndexListItems>
                <Size>(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)</Size>
                <ValueNode>
                    (*(reinterpret_cast&lt;const unsigned char*&gt;((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset) + 1
                        + ($i &gt;&gt; 3)) &amp; (1 &lt;&lt; ($i &amp; 7))) != 0
                </ValueNode>
            </IndexListItems>
        </Expand>
    </Type>-->

    <Type Name="QVarLengthArray&lt;*&gt;">
        <AlternativeType Name="QVarLengthArray&lt;*, int&gt;"/>
        <DisplayString>{{ size = {s} }}</DisplayString>
        <Expand>
            <Item Name="[capacity]">a</Item>
            <ArrayItems>
                <Size>s</Size>
                <ValuePointer>ptr</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

    <Type Name="QDate">
        <DisplayString Condition="jd == 0">Invalid</DisplayString>
        <DisplayString>{ 100 * ( ( 4 * ( jd + 68569) / 146097 )  - 49 ) + ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 ) + ( ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) / 11 )) }-{ ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 )  + 2 - ( 12 * (  ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) / 11 ) ) ) ) }-{ ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 ) - ( 2447 * ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) ) / 80 ) }</DisplayString>
        <Expand>
            <Item Name="[julianDay]">jd, d</Item>
            <Item Name="[Day]">( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 ) - ( 2447 * ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) ) / 80 )</Item>
            <Item Name="[Month]">( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 )  + 2 - ( 12 * (  ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) / 11 ) ) ) )</Item>
            <Item Name="[Year]">100 * ( ( 4 * ( jd + 68569) / 146097 )  - 49 ) + ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 ) + ( ( ( 80 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) - ( 1461 * ( ( 4000 * ( ( jd + 68569 - ( 146097 * ( 4 * ( jd + 68569) / 146097 ) + 3 ) / 4 ) + 1 ) ) / 1461001 )  ) / 4 + 31 )  / 2447 ) / 11 ))</Item>
        </Expand>
    </Type>

    <Type Name="QTime">
        <DisplayString Condition="mds == -1">Invalid</DisplayString>
        <DisplayString>{mds / 3600000}:{(mds % 3600000) / 60000}:{(mds / 1000) % 60}.{mds % 1000}</DisplayString>
        <Expand>
            <Item Name="[hour]"
                  Condition="(mds / 3600000) == 1">mds / 3600000, d</Item>
            <Item Name="[hours]"
                  Condition="(mds / 3600000) != 1">mds / 3600000, d</Item>
            <Item Name="[minute]"
                  Condition="((mds % 3600000) / 60000) == 1">(mds % 3600000) / 60000, d</Item>
            <Item Name="[minutes]"
                  Condition="((mds % 3600000) / 60000) != 1">(mds % 3600000) / 60000, d</Item>
            <Item Name="[second]"
                  Condition="((mds / 1000) % 60) == 1">(mds / 1000) % 60, d</Item>
            <Item Name="[seconds]"
                  Condition="((mds / 1000) % 60) != 1">(mds / 1000) % 60, d</Item>
            <Item Name="[millisecond]"
                  Condition="(mds % 1000) == 1">mds % 1000, d</Item>
            <Item Name="[milliseconds]"
                  Condition="(mds % 1000) != 1">mds % 1000, d</Item>
        </Expand>
    </Type>

    <Type Name="QDateTime">
        <DisplayString Condition="d-&gt;time.mds == -1">Invalid</DisplayString>
        <DisplayString Condition="d-&gt;utcOffset == 0">{d-&gt;date}  {d-&gt;time}  UTC</DisplayString>
        <DisplayString Condition="d-&gt;utcOffset &gt; 0">{d-&gt;date}  {d-&gt;time} UTC+{d-&gt;utcOffset}</DisplayString>
        <DisplayString Condition="d-&gt;utcOffset &lt; 0">{d-&gt;date}  {d-&gt;time}  UTC{d-&gt;utcOffset}</DisplayString>
        <Expand>
            <Item Name="[Date]">d-&gt;date</Item>
            <Item Name="[Time]">d-&gt;time</Item>
            <Item Name="[spec]">d-&gt;spec</Item>
            <Item Name="[offset]">d-&gt;utcOffset</Item>
        </Expand>
    </Type>

    <!-- Doesn't work d_ptr->data has no address -->
    <!--
    <Type Name="QFileInfo">
        <DisplayString>d_ptr-&gt;data-&gt;fileName</DisplayString>
        <Expand>
            <Item Name="[Path]">d_ptr-&gt;data-&gt;fileName</Item>
            <Item Name="[cTime]">d_ptr-&gt;data-&gt;fileTimes[0]</Item>
            <Item Name="[mTime]">d_ptr-&gt;data-&gt;fileTimes[1]</Item>
            <Item Name="[aTime]">d_ptr-&gt;data-&gt;fileTimes[2]</Item>
        </Expand>
    </Type>
    -->

    <Type Name="QRegularExpression">
        <DisplayString>{d.pattern}</DisplayString>
    </Type>

    <Type Name="QSharedData">
        <Expand>
            <Item Name="[referenced]">ref._q_value</Item>
        </Expand>
    </Type>

    <Type Name="QSharedPointer&lt;*&gt;">
        <DisplayString>strong reference to shared pointer of type {"$T1"}</DisplayString>
        <Expand>
            <Item Name="[is null]">value == 0</Item>
            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
        </Expand>
    </Type>

    <Type Name="QSharedDataPointer&lt;*&gt;">
        <DisplayString>pointer to implicit shared object of type {"$T1"}</DisplayString>
        <Expand>
            <ExpandedItem>d</ExpandedItem>
        </Expand>
    </Type>

    <Type Name="QExplicitlySharedDataPointer&lt;*&gt;">
        <DisplayString>pointer to explicit shared object of type {"$T1"}</DisplayString>
        <Expand>
            <ExpandedItem>d</ExpandedItem>
        </Expand>
    </Type>

    <Type Name="QPointer&lt;*&gt;">
        <DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString>
        <Expand>
            <Item Name="[is null]">wp.d == 0 || wp.d-&gt;strongref._q_value == 0 || wp.value == 0</Item>
        </Expand>
    </Type>

    <Type Name="QWeakPointer&lt;*&gt;">
        <DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString>
        <Expand>
            <Item Name="[is null]">d == 0 || d-&gt;strongref._q_value == 0 || value == 0</Item>
            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
        </Expand>
    </Type>

    <Type Name="QScopedPointer&lt;*&gt;">
        <DisplayString>scoped pointer to a dynamically allocated object of type {"$T1"}</DisplayString>
        <Expand>
            <Item Name="[is null]">!d</Item>
        </Expand>
    </Type>

    <Type Name="QScopedArrayPointer&lt;*&gt;">
        <DisplayString>scoped pointer to dynamically allocated array of objects of type {"$T1"}</DisplayString>
        <Expand>
            <Item Name="[is null]">!d</Item>
        </Expand>
    </Type>

    <Type Name="QPair&lt;*,*&gt;">
        <DisplayString>({first}, {second})</DisplayString>
        <Expand>
            <Item Name="[first]">first</Item>
            <Item Name="[second]">second</Item>
        </Expand>
    </Type>

    <Type Name="QVector&lt;*&gt;">
        <AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <Item Name="[size]">d-&gt;size</Item>
            <Item Name="[capacity]">d-&gt;capacity</Item>
            <ArrayItems>
              <Size>d-&gt;size</Size>
              <ValuePointer>($T1*)(reinterpret_cast&lt;char*&gt;(p-&gt;array))</ValuePointer>
            </ArrayItems>
        </Expand>
    </Type>

    <Type Name="QList&lt;*&gt;">
        <AlternativeType Name="QStringList"></AlternativeType>
        <AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
        <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <IndexListItems>
                <Size>d-&gt;end - d-&gt;begin</Size>
                <ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; sizeof(void*))
                    ? reinterpret_cast&lt;Node*&gt;(d->array + d->begin + $i)->v
                    : reinterpret_cast&lt;$T1*&gt;(d->array + d->begin + $i))
                </ValueNode>
            </IndexListItems>
        </Expand>
    </Type>

    <Type Name="QLinkedList&lt;*&gt;">
        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <LinkedListItems>
                <Size>d-&gt;size</Size>
                <HeadPointer>d-&gt;n</HeadPointer>
                <NextPointer>n</NextPointer>
                <ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
            </LinkedListItems>
        </Expand>
    </Type>

    <Type Name="QMapNode&lt;*,*&gt;">
        <DisplayString>({key}, {value})</DisplayString>
        <Expand>
            <Item Name="[key]">key</Item>
            <Item Name="[value]">value</Item>
        </Expand>
    </Type>

    <Type Name="QMap&lt;*,*&gt;">
        <AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <LinkedListItems>
                <Size>d-&gt;size</Size>
                <HeadPointer>d-&gt;forward[0]</HeadPointer>
                <NextPointer>forward[0]</NextPointer>
                <ValueNode>(QMapNode&lt;$T1,$T2&gt;*)(((char*)this) - (sizeof(QMapPayloadNode&lt;$T1,$T2&gt;) - sizeof(QMapData::Node*)))</ValueNode>
            </LinkedListItems>
        </Expand>
    </Type>

    <Type Name="QHashNode&lt;*,*&gt;">
        <DisplayString Condition="next == 0">(empty)</DisplayString>
        <DisplayString Condition="next != 0">({key}, {value})</DisplayString>
        <Expand>
            <Item Name="[key]" Condition="next != 0">key</Item>
            <Item Name="[value]" Condition="next != 0">value</Item>
        </Expand>
    </Type>

    <Type Name="QHash&lt;*,*&gt;">
        <AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[referenced]">d-&gt;ref._q_value</Item>
            <!--
            <IndexListItems>
                <Size>d-&gt;numBuckets</Size>
                <ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
            </IndexListItems>
            -->
            <LinkedListItems>
                <Size>d-&gt;size</Size>
                <HeadPointer>*(d-&gt;buckets)</HeadPointer>
                <NextPointer>next</NextPointer>
                <ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)this)</ValueNode>
            </LinkedListItems>
        </Expand>
    </Type>

    <Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
        <DisplayString Condition="next == 0">(empty)</DisplayString>
        <DisplayString Condition="next != 0">({key})</DisplayString>
        <Expand>
            <Item Name="[key]" Condition="next != 0">key</Item>
        </Expand>
    </Type>

    <Type Name="QSet&lt;*&gt;">
        <DisplayString>{{ size = {q_hash.d-&gt;size} }}</DisplayString>
        <Expand>
            <ExpandedItem>q_hash</ExpandedItem>
        </Expand>
    </Type>

    <Type Name="QCache&lt;*,*&gt;::Node">
        <DisplayString>({*keyPtr}, {*t})</DisplayString>
        <Expand>
            <Item Name="[key]">*keyPtr</Item>
            <Item Name="[value]">*t</Item>
        </Expand>
    </Type>

    <Type Name="QCache&lt;*,*&gt;">
        <DisplayString>{{ size = {hash.d-&gt;size} }}</DisplayString>
        <Expand>
            <Item Name="[max coast]">mx</Item>
            <Item Name="[total coast]">total</Item>
            <Item Name="[referenced]">hash.d-&gt;ref._q_value</Item>
            <LinkedListItems>
                <Size>hash.d-&gt;size</Size>
                <HeadPointer>f</HeadPointer>
                <NextPointer>n</NextPointer>
                <ValueNode>*((Node*)this)</ValueNode>
            </LinkedListItems>
        </Expand>
    </Type>

    <Type Name="QVariant">
        <!--Region DisplayString QVariant-->

        <DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QVariantMap">
            {*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QVariantList">
            {*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QString">
            {*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QStringList">
            {*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QByteArray">
            {*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QBitArray">
            {*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QDate">
            {*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QTime">
            {*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QRect">
            {*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QRectF">
            {*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QSize">
            {*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QSizeF">
            {*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QLine">
            {*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QLineF">
            {*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPoint">
            {*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPointF">
            {*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QVariantHash">
            {*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
        </DisplayString>
        <DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString>
        <DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString>
        <DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString>
        <DisplayString Condition="d.type == 0xffffffff">LastType</DisplayString>

        <!--End region DisplayString QVariant-->

        <!--Region DisplayView QVariant-->

        <StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView>

        <StringView Condition="d.type == QMetaType::QString">
            *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
        </StringView>

        <StringView Condition="d.type == QMetaType::QByteArray">
            *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
        </StringView>

        <!--End region DisplayView QVariant-->

        <!--Region Expand QVariant-->

        <Expand>
            <ExpandedItem Condition="d.type == QMetaType::QVariantMap">
                *((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QVariantList">
                *((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QString">
                *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QStringList">
                *((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QByteArray">
                *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QBitArray">
                *((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QDate">
                *((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QTime">
                *((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QRect">
                *((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QRectF">
                *((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QSize">
                *((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QSizeF">
                *((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QLine">
                *((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QLineF">
                *((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QPoint">
                *((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QPointF">
                *((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
            <ExpandedItem Condition="d.type == QMetaType::QVariantHash">
                *((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
            </ExpandedItem>
        </Expand>

        <!--End region Expand QVariant-->
    </Type>

    <Type Name="QUrl">
        <StringView Condition="d.stateFalgs == 0">{d}</StringView>
        <StringView>{d-&gt;scheme}{d-&gt;host}{d-&gt;path}</StringView>
        <Expand>
            <Item Name="scheme">d-&gt;sheme</Item>
            <Item Name="host">d-&gt;host</Item>
            <Item Name="path">d-&gt;path</Item>
            <Item Name="username">d-&gt;username</Item>
            <Item Name="password">d-&gt;password</Item>
            <Item Name="encodedOriginal">d-&gt;encodedOriginal</Item>
            <Item Name="query">d-&gt;query</Item>
            <Item Name="fragment">d-&gt;fragment</Item>
        </Expand>
    </Type>

</AutoVisualizer>

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章