Warning, file /sdk/clazy/tests/connect-3arg-lambda/main.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #include <QtCore/QString> 0002 #include <QtWidgets/QMenu> 0003 #include <QtCore/QTimer> 0004 void another_global(); 0005 void test() 0006 { 0007 QObject *o1; 0008 QObject *o2; 0009 QObject::connect(o1, &QObject::destroyed, 0010 [=] { o2->deleteLater(); }); // Warn 0011 0012 QObject::connect(o1, &QObject::destroyed, o2, 0013 [=] { o2->deleteLater(); }); // OK 0014 0015 QObject::connect(o1, &QObject::destroyed, 0016 [=] { o1->deleteLater(); }); // OK 0017 0018 QObject::connect(o1, &QObject::destroyed, 0019 [=] { int a; a = 1; }); // OK 0020 } 0021 0022 class MyObject : public QObject 0023 { 0024 public: 0025 void foo(); 0026 0027 void test() 0028 { 0029 MyObject *o2; 0030 connect(o2, &QObject::destroyed, [this] { // Warn 0031 foo(); 0032 }); 0033 0034 connect(this, &QObject::destroyed, [this] { // OK 0035 foo(); 0036 }); 0037 0038 connect(this, &QObject::destroyed, [o2] { // Warn 0039 o2->foo(); 0040 }); 0041 0042 connect(m_member, &QObject::destroyed, [this] { // Warn (this is dereferenced) 0043 m_member->deleteLater(); 0044 }); 0045 0046 connect(m_member, &QObject::destroyed, [this] { // Warn 0047 test(); 0048 }); 0049 0050 connect(m_member, &QObject::destroyed, [this] { // OK 0051 ::test(); 0052 }); 0053 0054 connect(m_member, &QObject::destroyed, [] { // OK 0055 another_global(); 0056 }); 0057 0058 MyObject *other; 0059 connect(other->m_member, &QObject::destroyed, [other] { // Warn (other might be deleted before) 0060 other->m_member->deleteLater(); 0061 }); 0062 0063 connect(other->m_member, &QObject::destroyed, [other] { // Warn 0064 other->m_member2->deleteLater(); 0065 }); 0066 0067 MyObject *other2; 0068 connect(other->m_member, &QObject::destroyed, [other, other2] { // Warn 0069 other2->m_member->deleteLater(); 0070 }); 0071 0072 } 0073 0074 QObject *m_member; 0075 QObject *m_member2; 0076 }; 0077 0078 void testTimer() 0079 { 0080 QObject *o; 0081 QTimer::singleShot(0, [] {}); // Warn 0082 QTimer::singleShot(0, o, [] {}); // OK 0083 0084 QTimer::singleShot(0, Qt::CoarseTimer, [] {}); // Warn 0085 QTimer::singleShot(0, Qt::CoarseTimer, o, [] {}); // OK 0086 } 0087 0088 void testQMenu() 0089 { 0090 MyObject o; 0091 QMenu menu; 0092 menu.addAction("foo", &o, &MyObject::test); // OK 0093 menu.addAction("foo", &o, []{}); // OK 0094 menu.addAction("foo", []{}); // Warn 0095 }