it-swarm.com.de

Einrichten von Qt5 mit Visual Studio 2015

Bei der Suche in Google nach "Qt5 - Windows 10 - VS 2015" wurde erst im April ein Blogbeitrag veröffentlicht, in dem angegeben wird, dass Unterstützung für VS 2015 in Arbeit ist ( link ).

Die Qt5-Downloadseite (OpenSource-Version) enthält derzeit keine Links für Visual Studio 2015. Ist es also möglich, Qt5 in VS 2015 zu verwenden, oder habe ich nur bis etwas neues erscheint?

PS. Ich möchte nur vermeiden, VS2013 über VS2015 zu installieren. Ich kann von der Quelle aus bauen, falls es benötigt wird.

Danke im Voraus

13
neoaggelos

Ich habe gerade einen kleinen Artikel geschrieben, in dem erklärt wird, wie Qt 5.5.1 (mit QtWebkit) mit Visual Studio 2015 kompiliert wird.

Ich stelle fest, dass dies keineswegs eine gute Antwort ist: Dieser Artikel stützt sich zwar hauptsächlich auf unterstützende Windows-Batchdateien, die Sie von meiner Website herunterladen können. Obwohl ich nicht vorhabe, meine Website oder den Artikel selbst zu ziehen, hätten andere SO - Benutzer oder Admins die Berechtigung, diese Antwort als zu unbeständig zu kennzeichnen.

Bis Qt-Leute offizielle vorgefertigte, mit Visual Studio 2015 erstellte Binaries anbieten, glaube ich, dass mein Artikel den Tag rettet. Hoffentlich hilft das.

17
Gregory Pakosz

Qt5.6.0 Beta enthält ein vorgefertigtes Bild für Visual Studio 2015. Das Add-In für Qt Visual Studio wird jedoch nicht mehr unterstützt. Es gibt eine Erweiterung namens Qt5Package , die Sie stattdessen installieren können.

Als ich versuchte, Qt 5.6.0 Beta in die Erweiterung einzufügen, habe ich den Fehler "Diese Qt-Version verwendet einen nicht unterstützten Makefile-Generator (verwendet: MSVC.NETMSBUILD, unterstützt: MSVC.NET, MSBUILD)" erhalten. Die Problemumgehung befindet sich in C:\Qt\Qt5.6.0\5.6\msvc2015\mkspecs\common\msvc-desktop.conf Qt 5.6.0 teilt alle versionsspezifischen Änderungen in einer separaten Datei msvc-base.conf auf. Wenn Sie den Inhalt dieser Datei kopieren und die Zeile "include (msvc-base.conf)" in der mscv-desktop.conf ersetzen, erkennt Qt5Package den Qt 5.6.0 Beta ohne Probleme.

Beachten Sie, dass dies in Qt5Package noch behoben werden muss.

3
parsley72

Ich hatte das gleiche Problem. Aber ich habe gerade den magischen Schlüssel gefunden. Das Paket in der folgenden Verknüpfung hat fast genau das Verhalten von Qt Visual Studio Add-In 1.2.4 für Qt5. Es beinhaltet alles, was Sie zum Abschließen der Arbeit mit Qt benötigen:

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

1
Ali Sedghi

Gebäude Qt

  1. Rufen Sie den vcvarsall-Batch mit der richtigen Architektur auf, z.

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" AMD64

  1. Rufen Sie den Qt-Umgebungsstapel auf, z.

call C:\Qt\x64\vs2015\qt561-1_x64\5.6\msvc2015_64\bin\qtenv2.bat

  1. Wenn Sie jom verwenden, fügen Sie jom zum Pfad hinzu, z.

Set PATH=C:\Qt\x64\vs2015\qt561-1_x64\Tools\QtCreator\bin;%PATH%

  1. Stellen Sie Ihre Qt Makespec ein, z.

Set QMAKESPEC=win32-msvc2015

  1. Ändern Sie die Verzeichnisse in die Quelle, für die Sie die Erstellung durchführen möchten, z.

cd C:\Qt\x64\vs2015\qt561-1_x64\5.6\Src\qtbase

  1. Führen Sie configure mit den gewünschten Optionen aus, z.

configure -platform win32-msvc2015 -nomake tests -nomake examples

Fügen Sie -opensource Zu Ihrem Befehl configure hinzu, wenn Sie Open Source Qt erstellen.

  1. Führen Sie nmake oder jom -j %NUMBER_OF_PROCESSORS% Aus oder ersetzen Sie %NUMBER_OF_PROCESSORS% Durch die Anzahl der Threads, die Sie verwenden möchten.

Qt integrieren

Nimm den Inhalt dieses Codeblocks und speichere ihn in einer Datei mit dem Namen qt.natvis Und platziere, wenn hier so, 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>

Sie sollten jetzt die Möglichkeit haben, mit Qt in Visual Studio zu debuggen.

Warnung

Auch wenn Qt es erwähnt, betonen sie nicht wirklich, wie wichtig es ist, richtig zu säubern, wenn Ihr Build fehlschlägt. Dies ist was die Site sagt und ich habe meine eigenen abgeleiteten Notizen unter dem zitierten Text hinzugefügt:

Hinweis: Wenn Sie Qt später am selben Ort neu konfigurieren und erstellen müssen, stellen Sie sicher, dass alle Spuren der vorherigen Konfiguration entfernt wurden, indem Sie das Erstellungsverzeichnis eingeben und nmake distclean Eingeben, bevor Sie configure erneut ausführen.

  1. Wenn sich Ihre Konfiguration mit configure ändern muss, müssen Sie nmake distclean Oder jom -j %NUMBER_OF_PROCESSORS% distclean Ausführen.
  2. Wenn Ihre Erstellung fehlgeschlagen ist, führen Sie eine saubere Ausführung aus, z. B. nmake clean Oder jom -j %NUMBER_OF_PROCESSORS% clean.

Dann sollten Sie configure mit den gewünschten Optionen ausführen und dann nmake oder jom -j %NUMBER_OF_PROCESSORS%.

0