我正在玩 基于此导师 http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-exposecppattributes.html,在 Qt5 中向 QML 公开C++类型的属性。 当我运行它时,我在问题窗格错误上收到此错误: 变量"QQml组件"具有初始值设定项但类型不完整 不仅我有这个错误 我也有这个错误 我使用 Q_PROPERTY 创建的信号未检测到
C:\Users\Tekme\Documents\QtStuf\quick\QmlCpp\message.h:15:错误:未在此范围内声明"authorChanged" 发出作者更改((; ^
我的代码是
#ifndef MESSAGE_H
#define MESSAGE_H
#include <QObject>
class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
public:
void setAuthor(const QString &a) {
if (a != m_author) {
m_author = a;
emit authorChanged();
}
}
QString author() const {
return m_author;
}
private:
QString m_author;
};
#endif
在我的主要.cpp
#include "message.h"
#include <QApplication>
#include <QQmlEngine>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QQmlEngine engine;
Message msg;
engine.rootContext()->setContextProperty("msg",&msg);
QQmlComponent component(&engine, QUrl::fromLocalFile("main.qml"));
component.create();
return a.exec();
}
您没有在main.cpp
中包含QQmlComponent
标题:
#include <QQmlComponent>
您还试图发出尚未声明的信号。您应该像这样在message.h
中声明它:
signals:
void authorChanged();
检查此示例。
你需要补充:
signals:
void authorChanged();
像这样给你的班级:
class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
public:
void setAuthor(const QString &a) {
if (a != m_author) {
m_author = a;
emit authorChanged();
}
}
QString author() const {
return m_author;
}
signals:
void authorChanged();
private:
QString m_author;
};