qt - 导入语句未列出我的自定义 C++ 公开类

标签 qt qml qtquick2

我正在为我的客户使用 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 找不到我的类。我做错了什么/遗漏了什么?

最佳答案

您需要导入模块,而不是类。与您的 qmlRegisterType 调用对应的导入将是

import si.mikroelektronika 1.0

关于qt - 导入语句未列出我的自定义 C++ 公开类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626544/

相关文章:

c++ - 类似iOS UIKit Dynamics的Qt/C++物理引擎

c++ - Qt 从我的主窗口创建新窗口

javascript - qml js中没有原型(prototype)

c++ - 如何为第 3 方渲染提供空 QML 项的 OpenGL 上下文?

qt - 错误: Cannot assign QObject* to QQuickItem*

c++ - 将鼠标事件发送到虚拟现实 OpenGL 场景中的 QtQuick 窗口

c++ - 在 main.cpp 之外使用 QQuickView

c++ - 如何在 Qt 的 QTranslator 中翻译性别代词

c++ - QGLWidget 在 Windows 7 中显示为黑色

c++ - 快速随机字符串