2016-03-05 67 views
1

我花了一些時間找到與插槽和信號有關的錯誤。我從另一個文件中複製了一些connect()行,並且我依靠編譯器找出需要在新類中定義的對象,所以我添加了它們。 '這個'對象不應該被編輯,所以我不在乎提供相應的插槽。該程序編譯好,即使沒有warnigns。但是 - 缺少插槽 - 無法運行。爲什麼Qt不會對缺少的插槽產生至少一個警告?

考慮到(有時候太)嚴格的類型檢查,爲什麼Qt至少不會產生警告? (在編譯時它肯定知道沒有這樣的插槽存在)。

+2

舊信號/插槽語法基於運行時字符串比較。由於各種原因,這是好的/壞的/醜陋的。如果您想編譯時檢查,請使用新的語法。但是,如果你使用舊的語法,Qt會在連接失敗時給控制檯輸出提供運行時錯誤。 – user3528438

回答

5

實際上,新的基於函數的連接在編譯時檢查,所以如果出現一些無效的信號/插槽,應用程序甚至不會編譯

所以,在編譯時檢查,你只需要使用基於仿型連接:

connect(slider, &QSlider::valueChanged, 
      doubleSpinBox, &QDoubleSpinBox::setValue); 

,而不是基於字符串:

connect(slider, SIGNAL(valueChanged(int)), 
     doubleSpinBox, SLOT(setValue(int))); 

你ç在此處詳細閱讀: http://doc.qt.io/qt-5/signalsandslots-syntaxes.html