QSimpleScada 未编译“类 QTextStream”,没有名为“setCodec”的成员 SimpleScada

Gam*_*ker 1 c c++ qt scada

您好,谢谢大家的宝贵时间,简单的 scada 不想编译 -> 空项目或名为 Weather https://github.com/IndeemaSoftware/QSimpleScadaSample的示例项目。我通过 git 和 qpm 安装 lib,但在编译期间类中缺少适当成员的问题保持不变。我真的很感谢任何形式的帮助,因为我真的陷入了最崇高的敬意

关于 QT 版本 Qt Creator 5.0.1 基于 Qt 5.15.2(MSVC 2019,64 位) 构建于 2021 年 9 月 14 日 01:17:14 来自修订版 7e965629b0

关于编译器的版本 mingw 8.1.0 64

错误日志 debug\qscadaboard.o ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboard.cpp g++ -c -fno-keep-inline-dllexport -g -std=gnu++1z -Wall - Wextra -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQPM_INIT(E)="E.addImportPath(QStringLiteral("qrc:/"));" -DQPM_USE_NS -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I../天气-I。-I../../Qt/libs/vendor -I../../Qt/libs/vendor/com/indeema/qsimplescada -IC:/Qt/6.2.0/mingw81_64/include -IC:/Qt /6.2.0/mingw81_64/include/QtQuickWidgets -IC:/Qt/6.2.0/mingw81_64/include/QtQuick -IC:/Qt/6.2.0/mingw81_64/include/QtOpenGL -IC:/Qt/6.2.0/ mingw81_64/include/QtWidgets -IC:/Qt/6.2.0/mingw81_64/include/QtGui -IC:/Qt/6.2.0/mingw81_64/include/QtQmlModels -IC:/Qt/6.2.0/mingw81_64/include/QtQml -IC:/Qt/6.2.0/mingw81_64/include/QtNetwork -IC:/Qt/6.2.0/mingw81_64/include/QtCore -Idebug -I。-I/include -IC:/Qt/6.2.0/mingw81_64/mkspecs/win32-g++ -o debug\qscadaboardcontroller.o ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboardcontroller.cpp ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboardcontroller.cpp:在成员函数 'void QScadaBoardController::openProject(QString)' 中: ....\Qt\libs\vendor\com\ indeema\qsimplescada\QScadaBoard\qscadaboardcontroller.cpp:264:28: 错误: 'class QTextStream' 没有名为 'setCodec' 的成员 lStreamFileOut.setCodec("UTF-8"); ^~~~~~~~ ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboardcontroller.cpp:在成员函数 'void QScadaBoardController::saveProject(QString)' 中: ....\ Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboardcontroller.cpp:315:18: 错误: 'class QTextStream' 没有名为 'setCodec' 的成员 lOut.setCodec("UTF-8"); ^~~~~~~~ ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboard.cpp:在成员函数 'virtual void QScadaBoard::mousePressEvent(QMouseEvent*)' 中:... .\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboard.cpp:112:14: 错误: 无效使用不完整类型 'class QMouseEvent' if (event->button() == Qt::LeftButton) { ^~ 在 C:/Qt/6.2.0/mingw81_64/include/QtWidgets/QWidget:1 包含的文件中,来自 ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard../QScadaObject/ qscadaobject.h:6,来自 ....\Qt\libs\vendor\com\indeema\qsimplescada\QScadaBoard\qscadaboard.h:4,来自 ....\Qt\libs\vendor\com\indeema\qsimplescada\ QScadaBoard\qscadaboard.cpp:1: C:/Qt/6.2.0/mingw81_64/include/QtWidgets/qwidget.h:73:7: 注意:“类 QMouseEvent”类 QMouseEvent 的前向声明;^~~~~~~~~~~ mingw32-make[1]: *** [Makefile.Debug:2090: debug/qscadaboardcontroller.o] 错误 1 ​​mingw32-make[1]: *** 等待未完成的作业.... mingw32-make[1]: *** [Makefile.Debug:1910: 调试/qscadaboard。

我的 Weather.pro 文件

#-------------------------------------------------
#
# Project created by QtCreator 2019-07-24T19:14:55
#
#-------------------------------------------------

QT       += core gui network qml quick quickwidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

include (E:/Dokumenty/AiR_rok_4/S7/EngineeringThesis/Qt/libs/vendor/vendor.pri)

TARGET = Weather
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact waenter code herernings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

DISTFILES +=

  [1]: https://i.stack.imgur.com/6sCFn.png
Run Code Online (Sandbox Code Playgroud)

zko*_*oza 5

  1. 您尝试编译的软件已有 2-3 年历史。它必须是用 Qt 5 编写和测试的。
  2. 您使用的 Qt 版本是 6.2(这可以在错误消息中看到)。
  3. 在Qt 5中,类QTextStream有一个成员函数setCodec,请参见https://doc.qt.io/qt-5/qtextstream-members.html
  4. 在 Qt 6 中,这个成员函数消失了: https: //doc.qt.io/qt-6/qtextstream-members.html

结论:

最简单的解决方案是将 Qt 版本降级到 5 系列。否则,您将面临被迫解决为 Qt 5 和 Qt 6 库编写的代码之间的差异的风险。这可能很容易——我不知道。无论如何,Qt 5 仍然被广泛使用,特别是,甚至你全新的 QtCreator 也是用它编译的。

有关将 Qt 5 应用程序移植到 Qt 6 的一些提示:https://www.qt.io/blog/porting-from-qt-5-to-qt-6-using-qt5compat-library

根据链接后面的博客,QTextCodec已被替换为,因此从 中删除成员函数 QStringConverter也就不足为奇了。相反,我可以看到有一个成员函数,这似乎是所需的替换。你自己去尝试一下吧——我从来没有使用过Qt的这一部分。setCodecQTextStreamsetEncoding