关于Qt Error 1记录

本文记录了在Qt开发中遇到的Error 1问题,具体表现为Makefile编译错误。问题源于非QObject子类使用了Q_OBJECT宏。解决方法包括移除Q_OBJECT宏或让类继承自QObject。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt日常bug记录之一

问题代码:-1: error: [Makefile.Release:3126: release/moc_frmsqlcreator.cpp] Error 1

修正前代码

class frmsqlcreator
{
   
   
    Q_OBJECT
public:
    frmsqlcreator();
    bool mysqlcreate();
    bool sheelcreate()
### 如何在Qt中使用SQLite #### 1. 引入SQL模块 为了在Qt项目中使用SQLite,需要在项目的`.pro`文件中引入SQL模块。通过添加以下代码来启用该功能: ```plaintext QT += sql ``` 这一步确保了Qt SQL模块被加载到项目中[^2]。 #### 2. 引用必要的头文件 在需要操作数据库的类定义中,需包含如下头文件以便访问SQLite的功能: ```cpp #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> ``` 这些头文件提供了创建数据库连接、执行查询以及处理错误所需的核心工具[^2]。 #### 3. 建立并打开数据库连接 建立与SQLite数据库的连接可以通过`QSqlDatabase`类实现。以下是具体的操作方法: ##### (a) 添加数据库驱动程序 确认当前环境支持SQLite作为数据库驱动器。通常情况下,默认已启用了SQLite支持。 ```cpp bool isDriverAvailable = QSqlDatabase::isDriverAvailable("QSQLITE"); if (!isDriverAvailable) { qDebug() << "SQLite driver not available!"; } ``` ##### (b) 初始化数据库对象 初始化一个新的数据库实例,并指定其名称或路径。 ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 使用 SQLite 驱动 db.setDatabaseName("example.db"); // 设置数据库名 ``` ##### (c) 测试连接状态 验证是否成功建立了数据库连接。 ```cpp if (!db.open()) { qDebug() << "Failed to open database:" << db.lastError().text(); } else { qDebug() << "Successfully connected to the database."; } ``` #### 4. 创建数据表 一旦数据库连接成功,就可以创建新的表格结构用于存储数据。下面是一个简单的例子展示如何创建一张名为`users`的数据表。 ```cpp QString createTableQuery = "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, age INT);"; QSqlQuery query; if (!query.exec(createTableQuery)) { qDebug() << "Create table failed:" << query.lastError().text(); } else { qDebug() << "Table created successfully."; } ``` #### 5. 插入记录 向刚刚创建好的`users`表里插入一条新纪录的过程如下所示: ```cpp QString insertRecordQuery = "INSERT INTO users(name, age) VALUES('John Doe', 30);"; if (!query.exec(insertRecordQuery)) { qDebug() << "Insert record failed:" << query.lastError().text(); } else { qDebug() << "Record inserted successfully."; } ``` #### 6. 查询数据 从数据库检索信息可通过编写SELECT语句完成。这里展示了两种常见的查询形式——遍历整个表和基于特定条件筛选的结果集。 ##### (a) 遍历查询 获取所有用户的列表及其详情。 ```cpp QString selectAllQuery = "SELECT * FROM users;"; if (query.exec(selectAllQuery)) { while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); int age = query.value(2).toInt(); qDebug() << "ID:" << id << ", Name:" << name << ", Age:" << age; } } else { qDebug() << "Select all records failed:" << query.lastError().text(); } ``` ##### (b) 条件查询 仅返回满足一定年龄范围内的用户资料。 ```cpp QString conditionQuery = "SELECT * FROM users WHERE age >= ? AND age <= ?"; if (query.prepare(conditionQuery)) { query.addBindValue(18); query.addBindValue(60); if (query.exec()) { while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); int age = query.value(2).toInt(); qDebug() << "Filtered ID:" << id << ", Name:" << name << ", Age:" << age; } } else { qDebug() << "Condition-based selection failed:" << query.lastError().text(); } } else { qDebug() << "Prepare statement failed:" << query.lastError().text(); } ``` #### 7. 关闭数据库 当所有的数据库交互完成后,记得关闭数据库以释放资源。 ```cpp db.close(); qDebug() << "Database closed."; ``` --- ### 总结 上述过程涵盖了从配置Qt工程至实际操作SQLite数据库的主要环节。每步都附有相应代码片段便于理解实践。值得注意的是,在Qt6及以上版本中,官方已经停止对SQLite2的支持而专注于SQLite3[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值