2014-04-07 10 views

Antwort

12

können Sie context properties verwenden C++ Objekte QML zu entlarven:

#include <QtGui/QGuiApplication> 
#include <QQmlContext> 
#include <QQuickView> 
#include "qtquick2applicationviewer.h" 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    QtQuick2ApplicationViewer viewer; 
#ifdef QT_DEBUG 
    viewer.rootContext()->setContextProperty("debug", true); 
#else 
    viewer.rootContext()->setContextProperty("debug", false); 
#endif 
    viewer.setMainQmlFile(QStringLiteral("qml/quick/main.qml")); 
    viewer.showExpanded(); 

    return app.exec(); 
} 

main.qml:

import QtQuick 2.2 

Item { 
    id: scene 
    width: 360 
    height: 360 

    Text { 
     anchors.centerIn: parent 
     text: debug 
    } 
} 

Es ist nicht möglich, diese von innen QML rein zu bestimmen.

2

Sie müssen es in Runtime oder in der Kompilierzeit wissen? Makros werden in der Kompilierzeit verwendet, QML wird in Runtime ausgeführt, daher gibt es keinen Unterschied für kompilierte Anwendungen zwischen "debug" und "release".

Lösung:

Create a class with const property declared in next way: 
class IsDebug : public QObject 
{ 
    QOBJECT 
    Q_PROPERTY(IsDebug READ IsCompiledInDebug) // Mb some extra arguments for QML access 
public: 
    bool IsCompiledInDebug() const { return m_isDebugBuild; } 
    IsDebug() 
#ifdef QT_DEBUG 
    : m_isDebugBuild(true) 
#else 
    : m_isDebugBuild(false) 
#endif 
    {} 
private: 
    const bool m_isDebugBuild; 
} 
+0

Mitch Lösung ist prägnanter, keine Notwendigkeit, eine zusätzliche QObject dafür haben. –

+0

@FrankOsterfeld 1) Meine Lösung enthält alle Anwendungen, nicht nur QML-Teile. 2) Wir haben unsere Antworten in der gleichen Zeit veröffentlicht. Ich habe es nicht gesehen, bevor ich mein eigenes geschrieben habe. –