diff options
author | Sergio Martins <smartins@kde.org> | 2018-03-28 22:13:54 +0100 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2018-03-28 22:13:54 +0100 |
commit | a7d808a87d4f120505edffab47ae9128154f3beb (patch) | |
tree | c72eb2191814d995a939dd83061c29208acc20d5 | |
parent | a5ff4acabe83ee0e9fde223d06db5b79602e7f90 (diff) |
connect-non-signal: Make it know about QOverload
BUG: 392441
-rw-r--r-- | src/QtUtils.cpp | 6 | ||||
-rw-r--r-- | tests/connect-non-signal/main.cpp | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/QtUtils.cpp b/src/QtUtils.cpp index cfa5042a..bba757d1 100644 --- a/src/QtUtils.cpp +++ b/src/QtUtils.cpp @@ -310,7 +310,7 @@ CXXMethodDecl *clazy::pmfFromUnary(Expr *expr) if (!context) return nullptr; - CXXRecordDecl *record = dyn_cast<CXXRecordDecl>(context); + auto record = dyn_cast<CXXRecordDecl>(context); if (!record) return nullptr; @@ -321,6 +321,10 @@ CXXMethodDecl *clazy::pmfFromUnary(Expr *expr) return pmfFromUnary(dyn_cast<UnaryOperator>(call->getArg(1))); } else if (auto staticCast = dyn_cast<CXXStaticCastExpr>(expr)) { return pmfFromUnary(staticCast->getSubExpr()); + } else if (auto callexpr = dyn_cast<CallExpr>(expr)) { + // QOverload case, go deeper one level to get to the UnaryOperator + if (callexpr->getNumArgs() == 1) + return pmfFromUnary(callexpr->getArg(0)); } return nullptr; diff --git a/tests/connect-non-signal/main.cpp b/tests/connect-non-signal/main.cpp index e41c5c6f..ecd4c13a 100644 --- a/tests/connect-non-signal/main.cpp +++ b/tests/connect-non-signal/main.cpp @@ -1,5 +1,5 @@ #include <QtCore/QObject> - +#include <QtWidgets/QComboBox> class MyObj; class MyObj : public QObject { @@ -51,3 +51,9 @@ void test3() QObject::connect(o, &MyDerivedObj::myVirtualSig, o, &MyObj::foo); // Warn, overridden but not a signal now QObject::connect(o, &MyObj::myVirtualSig, o, &MyObj::foo); // OK } + +void test_bug392441() +{ + QComboBox *combo; + QObject::connect(combo, QOverload<const QString &>::of(&QComboBox::currentIndexChanged), [] (QString) {}); // OK +} |