我正在为我的客户使用 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/