【问题标题】:Error QAbstractSocket while installing MQTT in QT C++在 QT C++ 中安装 MQTT 时出现错误 QAbstractSocket
【发布时间】:2020-05-08 10:30:20
【问题描述】:

我正在尝试在 Ubuntu 中为 QT C++ 构建和安装 QMqtt。我执行了以下命令,但出现错误。

git clone https://github.com/qt/qtmqtt.git
mkdir qtmqtt-build
cd qtmqtt-build
qmake ../qtmqtt/qtmqtt.pro

然后输入命令后

make

我遇到了一个错误

/home/atn/qtmqtt/src/mqtt/qmqttconnection.cpp:163:39: error: ‘errorOccurred’ is not a member of ‘QAbstractSocket’
163 |     connect(socket, &QAbstractSocket::errorOccurred, this, &QMqttConnection::transportError);
make[2]: *** [Makefile:639: .obj/qmqttconnection.o] Error 1
make[2]: Leaving directory '/home/atn/qt-build/src/mqtt'
make[1]: *** [Makefile:47: sub-mqtt-make_first] Error 2
make[1]: Leaving directory '/home/atn/qt-build/src'
make: *** [Makefile:49: sub-src-make_first] Error 2

我也尝试从 QtCreator 构建和安装,但得到了同样的错误。

请帮我解决这个问题。提前致谢。

【问题讨论】:

  • 我也找不到QAbstractSocket::errorOccurred() 函数(信号)。看起来像 MQTT 源中的错误。
  • qmake -v 的输出是什么?
  • 我尝试卸载 Qt5 然后重新安装。现在当我运行 qmake -v 时,结果是 /usr/bin/qmake: 12: exec: /usr/lib/qt5/bin/qmake: not found
  • 你搞定了吗?我目前遇到了类似的问题,很高兴知道您是否可以正常工作。谢谢

标签: c++ qt build installation mqtt


【解决方案1】:

尝试使用当前分支后仍然出现错误。我尝试另一个分支。

git clone https://github.com/qt/qtmqtt.git --branch 15.3

【讨论】:

    【解决方案2】:

    实际上QAbstractSocket 类中没有errorOccured 函数,可能作者忘记提交一些辅助重载... 反正有QAbstractSocket::error,但是QAbstractSocket::error信号过载,所以要使用函数指针连接到这个信号,你需要使用QOverload

    打开文件src/mqtt/qmqttconnection.cpp

    找到:

    connect(socket, &QAbstractSocket::errorOccurred, this, &QMqttConnection::transportError);
    

    并将其更改为:

    connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &QMqttConnection::transportError);
    

    【讨论】:

    • 非常感谢,但现在我得到另一个错误:/home/atn/qtmqtt/src/mqtt/qmqttclient_p.h:49:10: 致命错误: private/qobject_p.h: 没有这样的文件或目录 49 | #include | ^~~~~~~~~~~~~~~~~~~~~ 编译终止。
    • @AnhTu 确保您正在运行正确的 qmake 命令。如果您有诸如 private/qobject_p.h not found 之类的错误,您可能使用了错误的 qmake。在我的情况下,正确的 qmake 路径是 /opt/Qt/5.12.3/gcc_64/bin/qmake 在从不同路径运行 qmake 之前使用 rm -r * 删除所有内容
    【解决方案3】:

    您缺少 qtbase5-private-dev 中的私有标头:

    sudo apt install qtbase5-private-dev
    

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多