使用Visual Studio 2015设置Qt5

时间:2015-09-05 13:29:53

标签: visual-studio qt qt5 visual-studio-2015 windows-10

在Google上搜索Qt5 - Windows 10 - VS 2015'仅从4月份开始发表一篇博文,声称对VS 2015的支持正在进行中(link)。

Qt5下载页面(OpenSource版本)目前没有Visual Studio 2015的链接。那么,是否可以在VS 2015中使用Qt5,或者直到新的东西出现?

PS。我只是想避免在VS2015上安装VS2013。如果需要,我可以从源代码构建。

提前致谢

4 个答案:

答案 0 :(得分:17)

我刚写了a small article explaining how to compile Qt 5.5.1 (with QtWebkit) with Visual Studio 2015

我意识到这绝不是一个好的答案:当它完成这项工作时,该文章主要依赖于您可以从我的网站下载的帮助Windows批处理文件。因此,虽然我不打算拉我的网站或文章本身,但其他SO用户或管理员有权将此答案标记为过于不稳定......

无论如何,直到Qt人们提供使用Visual Studio 2015构建的官方预构建二进制文件,我相信我的文章可以节省一天。希望有所帮助。

答案 1 :(得分:3)

Qt5.6.0 Beta包含Visual Studio 2015的预构建映像。但是,不再支持Qt Visual Studio加载项。您可以安装名为Qt5Package的扩展程序。

我发现当我尝试在扩展程序中添加Qt 5.6.0 Beta时出现错误"此Qt版本使用不受支持的makefile生成器(使用:MSVC.NETMSBUILD,支持:MSVC.NET,MSBUILD)& #34 ;.解决方法位于C:\ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ mkspecs \ common \ msvc-desktop.conf Qt 5.6.0将所有特定于版本的更改拆分为单独的文件msvc-base.conf。如果您复制此文件的内容并替换行" include(msvc-base.conf)"在mscv-desktop.conf中,Qt5Package可以毫无问题地识别Qt 5.6.0 Beta。

请注意,这仍需要在Qt5Package中修复。

答案 2 :(得分:1)

我遇到了同样的问题。但我刚刚找到了神奇的钥匙。以下链接中的包几乎完全符合Qt Visual Studio Add-in 1.2.4 for Qt5的行为。它包括完成Qt工作所需的一切:

https://visualstudiogallery.msdn.microsoft.com/c89ff880-8509-47a4-a262-e4fa07168408

答案 3 :(得分:0)

建立Qt

  1. 使用正确的体系结构调用 vcvarsall批处理,例如:
  2. call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64

    1. 调用 Qt环境批处理,例如
    2. call C:\Qt\x64\vs2015\qt561-1_x64\5.6\msvc2015_64\bin\qtenv2.bat

      1. 如果使用jom,请将jom添加到路径,例如
      2. Set PATH=C:\Qt\x64\vs2015\qt561-1_x64\Tools\QtCreator\bin;%PATH%

        1. 设置您的Qt Makespec,例如
        2. Set QMAKESPEC=win32-msvc2015

          1. 将目录更改为您要构建的源,例如
          2. cd C:\Qt\x64\vs2015\qt561-1_x64\5.6\Src\qtbase

            1. 使用您可能需要的任何选项运行configure,例如
            2. configure -platform win32-msvc2015 -nomake tests -nomake examples

              如果构建开源Qt,请将-opensource添加到configure命令。

              1. 运行nmakejom -j %NUMBER_OF_PROCESSORS%或将%NUMBER_OF_PROCESSORS%替换为您要使用的主题数。
              2. 整合Qt

                获取此代码块的内容并将其保存到名为qt.natvis的文件中,如果在此处放置C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\qt.natvis

                <?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.atomic._q_value</Item>
                        <ArrayItems>
                            <Size>d-&gt;size</Size>
                            <ValuePointer>(QPoint*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
                        </ArrayItems>
                    </Expand>
                </Type>
                
                <Type Name="QPolygonF">
                    <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
                    <Expand>
                        <Item Name="[closed]">
                            d-&gt;size &gt; 0
                                &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).xp
                            == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).xp)
                                &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).yp
                            == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).yp)
                        </Item>
                        <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
                        <ArrayItems>
                            <Size>d-&gt;size</Size>
                            <ValuePointer>(QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
                        </ArrayItems>
                    </Expand>
                </Type>
                
                <Type Name ="QVector2D">
                    <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
                    <Expand>
                        <Item Name="[x]">xp</Item>
                        <Item Name="[y]">yp</Item>
                    </Expand>
                </Type>
                
                <Type Name ="QVector3D">
                    <DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString>
                    <Expand>
                        <Item Name="[x]">xp</Item>
                        <Item Name="[y]">yp</Item>
                        <Item Name="[z]">zp</Item>
                    </Expand>
                </Type>
                
                <Type Name ="QVector4D">
                    <DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString>
                    <Expand>
                        <Item Name="[x]">xp</Item>
                        <Item Name="[y]">yp</Item>
                        <Item Name="[z]">zp</Item>
                        <Item Name="[w]">wp</Item>
                    </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 ="QMatrix4x4">
                    <DisplayString>
                        {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }}
                    </DisplayString>
                    <Expand>
                        <Item Name="[m11]">m[0][0]</Item>
                        <Item Name="[m12]">m[1][0]</Item>
                        <Item Name="[m13]">m[2][0]</Item>
                        <Item Name="[m14]">m[3][0]</Item>
                        <Item Name="[m21]">m[0][1]</Item>
                        <Item Name="[m22]">m[1][1]</Item>
                        <Item Name="[m23]">m[2][1]</Item>
                        <Item Name="[m24]">m[3][1]</Item>
                        <Item Name="[m31]">m[0][2]</Item>
                        <Item Name="[m32]">m[1][2]</Item>
                        <Item Name="[m33]">m[2][2]</Item>
                        <Item Name="[m34]">m[3][2]</Item>
                        <Item Name="[m41]">m[0][3]</Item>
                        <Item Name="[m42]">m[1][3]</Item>
                        <Item Name="[m43]">m[2][3]</Item>
                        <Item Name="[m44]">m[3][3]</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>{((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub}</DisplayString>
                    <StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),sub</StringView>
                    <Expand>
                        <Item Name="[size]">d-&gt;size</Item>
                        <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
                        <ArrayItems>
                            <Size>d-&gt;size</Size>
                            <ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset / 2),c</ValuePointer>
                        </ArrayItems>
                    </Expand>
                </Type>
                
                <Type Name="QByteArray">
                    <DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb}</DisplayString>
                    <StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb</StringView>
                    <Expand>
                        <Item Name="[size]">d-&gt;size</Item>
                        <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
                        <ArrayItems>
                            <Size>d-&gt;size</Size>
                            <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),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.atomic._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>{{ julian day = {jd} }}</DisplayString>
                    <Expand></Expand>
                </Type>
                
                <Type Name="QTime">
                    <DisplayString
                        Condition="mds == 1">{{ millisecond = {mds} }}</DisplayString>
                    <DisplayString
                        Condition="mds != 1">{{ milliseconds = {mds} }}</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="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.atomic._q_value</Item>
                        <ArrayItems>
                            <Size>d-&gt;size</Size>
                            <ValuePointer>($T1*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</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.atomic._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.atomic._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.atomic._q_value</Item>
                        <TreeItems>
                            <Size>d-&gt;size</Size>
                            <HeadPointer>d-&gt;header.left</HeadPointer>
                            <LeftPointer>left</LeftPointer>
                            <RightPointer>right</RightPointer>
                            <ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
                        </TreeItems>
                    </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.atomic._q_value</Item>
                        <IndexListItems>
                            <Size>d-&gt;numBuckets</Size>
                            <ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
                        </IndexListItems>
                    </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.atomic._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::UnknownType">Invalid</DisplayString>
                    <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::QRegularExpression">RegularExpression</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::QEasingCurve">EasingCurve</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QUuid">Uuid</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QModelIndex">ModelIndex</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</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::QMatrix4x4">Matrix4x4</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QPolygonF">PolygonF</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString>
                    <DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</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-->
                
                </Type>
                </AutoVisualizer>
                

                您现在应该能够在Visual Studio中使用Qt进行调试。

                警告

                尽管Qt提到它,但他们并没有强调如果你的构建失败,那么正确清理会有多重要。这是what the site says,我在引用的文字下面添加了我自己的衍生笔记:

                  

                注意:如果您以后需要重新配置和重建Qt   location,确保以前配置的所有跟踪都是   通过输入构建目录并键入nmake distclean来删除   再次运行configure之前。

                1. 如果您使用configure的配置需要更改,则必须运行nmake distcleanjom -j %NUMBER_OF_PROCESSORS% distclean
                2. 如果您的构建失败,请运行干净,例如nmake cleanjom -j %NUMBER_OF_PROCESSORS% clean
                3. 然后,您应该使用您需要的任何选项运行configure,然后nmakejom -j %NUMBER_OF_PROCESSORS%