导入语句未列出我的自定义 C++ 公开类
Posted
技术标签:
【中文标题】导入语句未列出我的自定义 C++ 公开类【英文标题】:Import statement does not list my custom C++ exposed class 【发布时间】:2015-07-25 12:41:48 【问题描述】:我正在为我的客户使用 Qt 开发一些演示项目,该项目使用 mysql 数据库和 QML。现在,我已经使用 QML 创建了基本的 gui,创建了基本的数据库类,这里是项目文件:
TEMPLATE = app
QT += qml quick sql
SOURCES += main.cpp \
uesqldatabase.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
HEADERS += \
uesqldatabase.h
这里是暴露的类头文件:
#ifndef UESQLDATABASE_H
#define UESQLDATABASE_H
#include <QObject>
#include <QtSql/QSqlDatabase>
class UeSqlDatabase : public QObject
Q_OBJECT
Q_PROPERTY(bool isConnected READ isConnected NOTIFY ueConnectedChanged)
private:
bool m_ueConneted;
inline void setConnected(const bool& ueConnected)
this->m_ueConneted=ueConnected;
public:
explicit UeSqlDatabase(QObject *parent = 0);
inline const bool& isConnected() const
return this->m_ueConneted;
~UeSqlDatabase();
signals:
void ueConnectedChanged();
public slots:
void ueConnectToDatabase (const QString& ueStrHost, const QString& ueStrDatabase,
const QString& ueStrUsername, const QString& ueStrPassword);
;
#endif // UESQLDATABASE_H
这是公开的类实现:
#include "uesqldatabase.h"
UeSqlDatabase::UeSqlDatabase(QObject *parent)
: QObject(parent)
this->setConnected(false);
// constructor
UeSqlDatabase::~UeSqlDatabase()
// destructor
void UeSqlDatabase::ueConnectToDatabase (const QString& ueStrHost, const QString& ueStrDatabase,
const QString& ueStrUsername, const QString& ueStrPassword)
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL",
"testDb");
db.setHostName(ueStrHost);
db.setDatabaseName(ueStrDatabase);
db.setUserName(ueStrUsername);
db.setPassword(ueStrPassword);
if(db.open())
this->setConnected(true);
// ueConnectToDatabase
这里是main.cpp
代码:
#include <QtQml>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "uesqldatabase.h"
int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<UeSqlDatabase>("si.mikroelektronika",
1,
0,
"UeSqlDatabase");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
应用程序运行没有问题,但是当我尝试在main.qml
中导入暴露的类(UeSqlDatabase
)时,QtCreator 找不到我的类。我做错了什么/错过了什么?
【问题讨论】:
你的进口声明是什么?试试import si.mikroelektronika 1.0
@FrankOsterfeld 就是这样!我发出了错误的import
声明!你能促进评论回答吗?
【参考方案1】:
您需要导入模块,而不是类。与您的 qmlRegisterType
调用对应的导入将是
import si.mikroelektronika 1.0
【讨论】:
以上是关于导入语句未列出我的自定义 C++ 公开类的主要内容,如果未能解决你的问题,请参考以下文章
从 c++ 到 python 的 SWIG:未定义的符号导入问题 [关闭]