2014-04-07 19 views

cevap

12

Sen QML C++ nesneleri göstermek için context properties kullanabilirsiniz:

#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: Bu QML içinden tamamen Bunu belirlemek mümkün değildir

import QtQuick 2.2 

Item { 
    id: scene 
    width: 360 
    height: 360 

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

.

2

Çalışma zamanında veya derleme zamanında bilmek mi istiyorsunuz? Makrolar derleme zamanında kullanılır, QML çalışma zamanında yürütülür, böylece "debug" ve "release" arasında derlenmiş uygulama için fark yoktur.

Çözüm:

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'in çözüm daha özlü, bunun için ekstra bir QObject olması gerek. –

+0

@FrankOsterfeld 1) Benim çözümüm yalnızca QML bölümünü değil tüm uygulamayı da kapsıyor. 2) Cevaplarımızı aynı zamanda yayınladık. Ben kendi mesajımı göndermeden önce görmedim. –

İlgili konular