In Qt haben verschiedene Klassen eine Reihe von Signalen und Slots, die überladen sind, und daher sieht das Aufzeichnen von Verbindungen einfach monströs aus, wenn Sie einen static_cast durchführen müssen, um ein bestimmtes Signal oder einen bestimmten Slot zu spezifizieren.
In Qt gibt es also eine Funktionalität zum vereinfachten Schreiben solcher Überladungen durch die Template-Methoden QOverload oder durch das Makro qOverload .
Der grundlegende Unterschied zwischen qOverload und QOverload besteht darin, dass ein Makro C++ Version 14 erfordert, während eine Vorlage C++ Version 11 erfordert.
Es stellt sich heraus, dass dies ein Beispiel ist
struct Foo { void overloadedFunction(); void overloadedFunction(int, QString); }; // требует C++14 qOverload<>(&Foo:overloadedFunction) qOverload<int, QString>(&Foo:overloadedFunction) // тоже, с C++11 QOverload<>::of(&Foo:overloadedFunction) QOverload<int, QString>::of(&Foo:overloadedFunction)
Bei Signalen und Slots mit QOverload sieht der Eintrag so aus (Beispiel aus der QComboBox-Dokumentation)
connect(comboBox, QOverload<const QString &>::of(&QComboBox::activated), [=](const QString &text){ /* ... */ });
Stimmen Sie zu, es wird viel einfacher zu verstehen sein als so etwas aus der vorherigen Lektion über Signale und Slots .
connect(m_testClass, static_cast<void(TestClass::*)(int)>(&TestClass::testSignal), this, static_cast<void(Widget::*)(int)>(&Widget::onTestSlot));
Lassen Sie uns dieses Beispiel mit QOverload umschreiben
connect(m_testClass, QOverload<int>::of(&TestClass::testSignal), this, QOverload<int>::of(&Widget::onTestSlot));
Die Notation ist nicht nur kürzer, sondern auch verständlicher geworden.
Класс! Улучшил мою кодерскую жизнь :) А как узнал об этом QOverload? Наткнулся изучая доки?)
Ага. Просматривал документацию на QComboBox и наткнулся на обновление записи коннектнов.
Кстати, подпишись и на раздел статей Android, я сейчас пишу серию статей, в которых описываются два варианта примеров:
В документации до сих пор нет отдельного описания.
В документации по многим моментам нет описания, особенно, что касается QQuick, просто беда. Столько функционала не документировано, остаётся только в заголовочники лезть и сверяться с документацией, что там есть, а что нет.