导入语句未列出我的自定义 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++ 向量

(C++) 我的自定义数组无法初始化(编译错误)

laravel 自定义命令未列出

从 c++ 到 python 的 SWIG:未定义的符号导入问题 [关闭]

使用 CMake 的自定义 .h 和 cpp 的未定义符号 [关闭]

如何仅列出我的自定义命令(Laravel)?