QtQuick,如何知道应用程序是在调试模式还是发布模式下编译的?

时间:2014-04-07 07:21:08

标签: qt qml qt-quick qtquick2 qtquickcontrols

在Qt / C ++中有QT_DEBUG定义宏,可以知道它何时在调试或发布时编译。

是否有任何方法可以知道应用程序是否在QML文件中以调试或释放模式运行?

2 个答案:

答案 0 :(得分:13)

您可以使用context properties将C ++对象公开给QML:

#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
    }
}

不可能完全从QML中确定这一点。

答案 1 :(得分:3)

您需要在运行时或编译时知道它吗?宏在编译时使用,QML在运行时执行,因此编译应用程序在&#34; debug&#34;之间没有区别。和&#34;发布&#34;。

解决方案:

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;
}