2016-04-08 32 views
1

Q'nun QML dili her türlü "katı" modu sağlıyor mu? Özellikle, iki özellik vardır İsterdim: referansa"sıkı" mod?

  • Uygulama kazasında undefined veya null (ör foo = barfoo null olduğunda foo varolan bir özelliktir ancak bar tanımlı değildir ve foo.bar olduğunda)
  • "sert", (console.assert özelliği uygulamayı kilitlemez) doğrular. Tüm .qml üzerinde
+0

** ** çökmeler mi istiyorsunuz? – dtech

+0

@ddriver Evet, geliştirme sırasında. Konsol çıktısını okumaya ve çeşitli problemlerin ne kadar ciddi olduğunu tahmin etmeye çalışmaktan çok daha kolay. (Bu benim görüşüme göre en azından QML tarafında çok iyi tasarlanmış bir uygulama değildir.) –

+3

@ddriver Çarpışan uygulamaların daha genel bir savunması ve sevdiğim hata işleme ile ilgili bir makale için teşvik etmenin keyfini çıkarın, "Hatalar Hatalarını Kurtarılamıyor!" bölümüne bakın. Burada: http://joeduffyblog.com/2016/02/07/the-error-model/ –

cevap

8

1. Kullanım QML tüysüz

Çalıştır qmllint ve

uyarı/QML hatası üzerinde inşa kurulum

find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} + 

2. Kilitlenme uygulaması içinde .js dosyaları

Özel bir QDebug ileti işleyicisi işlevi static void handler(QtMsgType type, const QMessageLogContext& context, const QString &message);'a yazdığınızda, QM'yi döndüren qInstallMessageHandler(&MyQDebugMessageHandler::handler); aracılığıyla kayıt olursunuz ölümcül kütük haline L uyarıları:

if (type == QtWarningMsg) 
{ 
    auto fatalWarnings = std::vector<QString>{ 
      QStringLiteral("ReferenceError:"), 
      QStringLiteral("is not a type"), 
      QStringLiteral("File not found"), 
    }; 

    for (const auto &s : fatalWarnings) 
    { 
     if (message.contains(s)) 
     { 
      type = QtFatalMsg; 
      break; 
     } 
    } 
} 

Sonra emin olun bu tür QtFatalMsg kazasında Uygulama; QDebug mesajları. console.assert üzerinde

3. Çarpışma()

console.assert() onları tespit belirli hataları başka bir şey yaratır. Bu yüzden hataları 2. uygulamaya da kilitlemek için 2. noktaya geçin.

+0

Tanrım. Qmllint hakkında nasıl bilemedim? Bu GUI üzerinde çalışmaya başladığımdan beri böyle bir şey istedim. Bu ve geri kalanı için çok teşekkür ederim. –

+0

:) Zevklerim! –