C++ 范围中未定义Qt版本检查和QOverload
大家好 背景: 我正准备在debian系统上构建和测试部署我的应用程序,但是我遇到了一些麻烦 如页面所示,我的应用程序使用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"
QOverload
作为
示例用法是(从文档页):
现在,这让我检查何时找到QOverload
,并包括标题
可在qglobal.h
中找到,但仅在Qt5.7中引入
- Qoverload需要使用C++11
- 或qOverload,使用C++14
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){ /* ... */ });