我刚刚开始学习 Qt,目前正在阅读这本书学习 Qt 5,作者:Nicolas Sheriff。在我所在的位置,在第 2 章中,我遵循所有说明,并且理解我在做什么,但我陷入了一件事:当我与其他程序一起编译以下程序时,我收到此错误列表:显示错误消息的图像 https://i.stack.imgur.com/zg4Bm.png
这是项目结构 https://i.stack.imgur.com/9eTsD.png
我发现值得展示的文件是:
cm.pro 文件
QT -= gui
TARGET = cm-lib
TEMPLATE = lib
CONFIG += c++17
DEFINES += CMLIB_LIBRARY
INCLUDEPATH += source
SOURCES += source/models/client.cpp \
source/controllers/master-controller.cpp \
HEADERS += source/cm-lib_global.h \
source/controllers/master-controller.h \
source/models/client.h \
cm-lib.pro
QT -= gui
TARGET = cm-lib
TEMPLATE = lib
CONFIG += c++17
DEFINES += CMLIB_LIBRARY
INCLUDEPATH += source
SOURCES += source/models/client.cpp \
source/controllers/master-controller.cpp \
HEADERS += source/cm-lib_global.h \
source/controllers/master-controller.h \
source/models/client.h \
cm-ui.pro
QT += qml quick
TEMPLATE = app
CONFIG += c++17
INCLUDEPATH += source \
../cm-lib/source
SOURCES += source/main.cpp
RESOURCES += views.qrc
LIBS += -L$$PWD/../../build-cm-kit1-Debug/cm-lib/ -lcm-lib
主控制器.h
#ifndef MASTERCONTROLLER_H
#define MASTERCONTROLLER_H
#include <QObject>
#include <QString>
#include <cm-lib_global.h>
namespace cm::controllers {
class CMLIBSHARED_EXPORT MasterController : public QObject
{
Q_OBJECT
QString welcomeMessage = "This is MasterController to Major Tom";
Q_PROPERTY( QString ui_welcomeMessage MEMBER welcomeMessage CONSTANT )
public:
explicit MasterController(QObject* parent = nullptr);
};
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <controllers/master-controller.h>
int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
qmlRegisterType<cm::controllers::MasterController>("CM", 1, 0, "MasterController");
cm::controllers::MasterController masterController{};
QQmlApplicationEngine engine{};
engine.rootContext()->setContextProperty("masterController", &masterController);
engine.load(QUrl(QStringLiteral("qrc:/views/MasterView.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
之所以这么长,是因为我在这里像书中一样使用了 MVC 设计模式。
我认为问题是由 Q_OBJECT 宏包含在MasterController.h
因为当我删除它时,该项目编译良好,没有任何问题。
在谷歌搜索这个问题之后,在我访问过的几乎所有地方,错误都是由于包含 Q_OBJECT 宏的类将在它们自己的头文件中声明或qmake
没有在包括 Q_OBJECT 在内的这些文件上重新运行,但在我的情况下并非如此。
使用的系统工具:
- Qt创建者
- Qt 5.11
- 库班图 18.04