C++ 范围中未定义Qt版本检查和QOverload

C++ 范围中未定义Qt版本检查和QOverload,c++,qt,c++11,cmake,ubuntu-16.04,C++,Qt,C++11,Cmake,Ubuntu 16.04,大家好 背景: 我正准备在debian系统上构建和测试部署我的应用程序,但是我遇到了一些麻烦 如页面所示,我的应用程序使用QOverload作为 示例用法是(从文档页): 现在,这让我检查何时找到QOverload,并包括标题 可在qglobal.h中找到,但仅在Qt5.7中引入 Qoverload需要使用C++11 或qOverload,使用C++14 问题是Ubuntu 16.04使用的是Qt版本5.5: qtchooser -print-env QT_SELECT="default"

大家好

背景:

我正准备在debian系统上构建和测试部署我的应用程序,但是我遇到了一些麻烦

如页面所示,我的应用程序使用
QOverload
作为

示例用法是(从文档页):

现在,这让我检查何时找到
QOverload
,并包括标题

可在
qglobal.h
中找到,但仅在Qt5.7中引入

  • Qoverload需要使用C++11

  • 或qOverload,使用C++14

问题是Ubuntu 16.04使用的是Qt版本5.5:

qtchooser -print-env
QT_SELECT="default"
QTTOOLDIR="/usr/lib/x86_64-linux-gnu/qt5/bin"
QTLIBDIR="/usr/lib/x86_64-linux-gnu"

/usr/lib/x86_64-linux-gnu/qt5/bin/qmake -v
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu
我的尝试:

我决定为我使用电话

#if QT_VERSION <= QT_VERSION_CHECK(5, 7, 0)
    qDebug(mainclient) << "Adding connector for settings prefered connection protocol";
    conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
        // my code here which which handles events
    });
#endif

#如果QT_版本在逻辑表达式中出现错误:

#if QT_VERSION <= QT_VERSION_CHECK(5, 7, 0)

#如果QT_版本您可以使用
静态_cast
替换
QOverload

connect(networkReply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
    [=](QNetworkReply::NetworkError code){ /* ... */ });
connect(networkReply,static_cast(&QNetworkReply::error),
[=](QNetworkReply::NetworkError代码){/*…*/});

从这里开始:

可能忘了包含一些标题?@vahancho在
Qt5.7+
中有一个
qglobal.h
标题,其中找到了
QOverload
函数。在
Qt5.7之前
,根本没有
QOverload
函数,因为它在此之前不存在,因此答案(现在删除)建议没有要包含的标题:
\if(QT\u版本我删除了答案,因为我不确定,只是检查一下(它可能是创建者,顺便说一句)@p-a-o-l-o no.我将源代码上传到我的github帐户,并将其安装到新的Ubuntu16.04 LTS虚拟机上并从那里构建。因此,不,这不是QT Creator造成的问题。我要提到的是,在我的开发机器上,应用程序编译没有问题。我的开发机器使用
QMake 3.1
QT版本5.9.3
#if QT_VERSION <= QT_VERSION_CHECK(5, 7, 0)
    qDebug(mainclient) << "Adding connector for settings prefered connection protocol";
    conProtocol = QObject::connect(ui->grpProtocol, QOverload<QAbstractButton *, bool>::of(&QButtonGroup::buttonToggled), [this](){
        // my code here which which handles events
    });
#endif
#if QT_VERSION <= QT_VERSION_CHECK(5, 7, 0)
connect(networkReply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),
    [=](QNetworkReply::NetworkError code){ /* ... */ });