Qt項目鍛煉——TODO(五)

發現問題

如果是自己創建的ui文件,怎么包含進自己的窗口類并且成為ui成員?

一般來說Qt designer 會根據你.ui文件生成對應的ui_文件名這個類(文件名是ui文件名),它包含了所有 UI 組件(如按鈕、文本框、標簽等)的定義和布局代碼,以及一個setupUi函數用于初始化 UI。

Qt 里的?.ui?文件本身不是編程語言編寫的,而是一種 XML 格式的文件,用于描述用戶界面的布局和屬性。

生成與轉換

.ui?文件通常是通過 Qt Designer(Qt 提供的可視化界面設計工具)創建和編輯的。在 Qt Designer 中,你可以通過拖拽、設置屬性等操作來構建界面,比如添加按鈕、文本框、布局等各種控件。

當保存?.ui?文件后,Qt 會通過?uic(User Interface Compiler,用戶界面編譯器 )工具將?.ui?文件轉換為對應的 C++ 代碼,生成一個包含界面初始化和控件定義的頭文件(一般命名為?ui_<窗口名>.h?)。

我之前抄AI給的ui文件,沒有改里面對應的窗口類名(Form),導致包含#include"ui_StatisticWindow.h",使用new StatisticWindow時報錯,顯示類不完整。

問題一?無法加載QtChart模塊

你會發現根本就沒有Qtchart這個目錄,也就是說就沒有這個模塊。

我使用Qt Maintain Tool?

哪怕后面更新組件也找不到。

但是奇怪的是,你點開Vs的項目屬性,點開Qt Project Setting

點擊選擇模塊,找到Qt Chart。

你一勾選,點擊OK,后面再應用。馬上程序就報錯。

我也不知道到哪去下載這個模塊。

問題二 Qt 本身沒有MySql驅動

需要自己去安裝,導致我一直找為什么無法打開數據庫,還是多虧AI、qDebug和調試。

后面選擇Qt自帶的SQLite數據庫。

數據庫文件概述

在使用 SQLite 數據庫時,數據庫文件是一個包含數據庫所有數據和結構的普通文件。SQLite 是一個嵌入式數據庫,它不需要單獨的服務器進程,所有的數據都存儲在一個單一的磁盤文件中。

數據庫文件的來源

1. 系統是否自帶

Qt 系統、VS 系統或者電腦系統通常不會自帶特定的 SQLite 數據庫文件。不過,操作系統可能會預裝 SQLite 庫(例如在一些 Linux 發行版中),這使得你可以在開發環境中使用 SQLite。

使用?SQLite 驅動?時,不需要額外下載獨立的 SQLite 數據庫服務器程序,也?不需要創建用戶,原因和使用方式如下:

1. 為什么不需要額外下載?

  • SQLite 是 “嵌入式” 數據庫
    SQLite 的核心是一個?單一的庫文件(如?sqlite3.dll/libsqlite3.so/libsqlite3.dylib),Qt 已經默認集成了 SQLite 的驅動支持(QSQLITE?驅動)。
    也就是說,只要你安裝了 Qt,就已經自帶了連接 SQLite 所需的全部功能,無需額外下載數據庫程序。

  • 運行方式簡單
    SQLite 直接通過?數據庫文件(比如?todo.db)工作,不需要像 MySQL 那樣啟動獨立的數據庫服務進程。程序運行時,Qt 會通過?QSQLite?驅動直接讀寫數據庫文件。

2. 為什么不需要創建用戶?

  • SQLite 無用戶權限體系
    SQLite 的設計目標是輕量、嵌入式使用,沒有 “用戶賬戶”“密碼”“權限管理”?這些復雜概念。它的訪問權限完全依賴于?操作系統的文件權限(誰能讀寫數據庫文件,誰就能操作數據庫)。

    舉個例子:
    如果你的程序能讀寫?todo.db?文件,就可以直接連接、增刪改查;如果文件權限被限制(比如只讀),操作也會受限制。

3. 適合場景

  • 開發 / 測試階段:無需部署數據庫服務,一個文件即可搞定。
  • 輕量級應用:如工具類程序、本地數據存儲的小軟件。
  • 嵌入式設備:因為 SQLite 無需獨立進程,適合資源有限的環境。

4. 注意事項

  • 并發限制
    SQLite 是?文件級鎖,多線程 / 多進程高并發寫操作時性能會下降(但讀操作影響較小)。如果是復雜的多用戶場景,MySQL/PostgreSQL 更合適。

  • 加密需求
    默認 SQLite 不加密數據庫文件。如果需要加密,可集成?SQLCipher(需額外編譯或使用支持加密的 Qt 版本)。

  • 文件路徑問題
    如果?dbPath?是相對路徑,數據庫文件會創建在程序運行目錄下。建議用絕對路徑或明確管理文件位置,避免找不到文件。

總結:
用 SQLite 替換 MySQL 后,代碼更簡單、無需額外部署,非常適合快速開發或本地數據存儲場景。如果你的需求是 “輕量級、無需復雜配置”,SQLite 是絕佳選擇 ?

修改后的代碼

#pragma once  
#include <QtCore/QObject>  
#include <QtSql/QSqlDatabase> 
#include <QtCore/QString>  
#include<qsqlerror.h>class DatabaseManager : public QObject {  Q_OBJECT  
public:  static DatabaseManager& instance();  bool initDatabase(const QString& dbPath = "todo.db");QSqlDatabase database() const;  // 數據庫操作方法  bool createTables();  bool backupDatabase(const QString& backupPath);  private:  explicit DatabaseManager(QObject* parent = nullptr);  ~DatabaseManager();  Q_DISABLE_COPY(DatabaseManager)  QSqlDatabase m_db;  
};
#include "DatabaseManager.h"
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QDebug>DatabaseManager& DatabaseManager::instance() {static DatabaseManager instance;return instance;
}DatabaseManager::DatabaseManager(QObject* parent) : QObject(parent) {// 使用SQLite驅動(移除了所有MySQL相關配置)m_db = QSqlDatabase::addDatabase("QSQLITE");
}DatabaseManager::~DatabaseManager() {if (m_db.isOpen()) {m_db.close();}
}bool DatabaseManager::initDatabase(const QString& dbPath) {m_db.setDatabaseName(dbPath); // 設置數據庫文件名if (!m_db.open()) {qDebug() << "Failed to open SQLite database:" << m_db.lastError().text();return false;}return createTables();
}QSqlDatabase DatabaseManager::database() const
{return QSqlDatabase();
}bool DatabaseManager::createTables() {QSqlQuery query(m_db);// 修正SQL語法:// - AUTOINCREMENT (SQLite的自增關鍵字)// - INTEGER (替代BOOLEAN,SQLite用0/1表示布爾值)QString createTableQuery = "CREATE TABLE IF NOT EXISTS tasks (""id INTEGER PRIMARY KEY AUTOINCREMENT,""title TEXT NOT NULL,""description TEXT,""priority INTEGER DEFAULT 1,""due_date DATE,""completed INTEGER DEFAULT 0,"  // 使用INTEGER而非BOOLEAN"created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP"")";if (!query.exec(createTableQuery)) {qDebug() << "Failed to create table:" << query.lastError().text();return false;}return true;
}bool DatabaseManager::backupDatabase(const QString& backupPath) {// 實現數據庫備份邏輯return false;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90978.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue框架之模板語法全面解析

Vue框架之模板語法全面解析一、模板語法的核心思想二、插值表達式&#xff1a;數據渲染的基礎2.1 基本用法&#xff1a;渲染文本2.2 純HTML渲染&#xff1a;v-html指令2.3 一次性插值&#xff1a;v-once指令三、指令系統&#xff1a;控制DOM的行為3.1 條件渲染&#xff1a;v-if…

從零開始的語言模型構建 CS336 第一課(一)

語言模型的發展歷史 &#x1f3d7; Early foundation models (2010年代后期) 2018&#xff1a;ELMo&#xff08;基于 LSTM 預訓練 微調&#xff09;[Peters 2018]2018&#xff1a;BERT&#xff08;基于 Transformer 預訓練 微調&#xff09;[Devlin 2018]2019&#xff1a;G…

微信獲取access_token授權的兩種不同情況

1.網頁授權&#xff1a;需要頁面調用授權的sdk&#xff0c;首先需要獲取到code參數 &#xff08;A.網頁版的獲取code參考另一篇文章&#xff1a;https://blog.csdn.net/ettamei/article/details/148763361?spm1011.2415.3001.5331 B.前端sdk提供&#xff1a;code只有5分鐘的有…

達夢數據庫windows靜默安裝

<DATABASE> <!-- 安裝數據庫的語言配置&#xff0c;簡體中文版: ZH&#xff0c;繁體中文版: CHT&#xff0c;英文版: EN&#xff0c;不區分大小寫。不允許為空 --> <LANGUAGE>ZH</LANGUAGE> <!-- 安裝程序的時區配置&#xff0c;缺省為08:00&#…

20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機

20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機 2025/7/9 10:11緣起&#xff1a;由于榮品RD-RK3588開發板使用的PMIC是RK806。 以前在榮品PRO-RK3566開發板上使用的PMIC是RK809上做過了長按開機的。 直接遷移過來了&#xff01;1、根據RK809的DATASHEET&a…

20250713-`Seaborn.pairplot` 的使用注意事項

Seaborn.pairplot 的使用注意事項 sns.pairplot 是 Seaborn 中最常用、最強大的探索性數據分析&#xff08;EDA&#xff09;函數之一。 它在一個調用里就能同時展示&#xff1a; 任意兩兩變量間的 散點圖&#xff08;觀察關系、聚類、異常值&#xff09;對角線上每個變量的 單…

如何選擇合適的AI論文寫作工具?七個AI英文論文寫作網站

在寫作英文論文時&#xff0c;許多人往往會遇到寫作思路卡殼、語言不流暢、重復率過高等問題。幸運的是&#xff0c;AI論文寫作工具的出現&#xff0c;極大地提升了寫作效率和質量。這些工具不僅可以幫你快速生成內容、擴展論點&#xff0c;還可以優化語言&#xff0c;幫助你順…

【保姆級喂飯教程】idea中安裝Conventional Commit插件

目錄前言一、安裝二、測試前言 之前了解到了Conventional Commit規范&#xff0c;idea中好像沒什么鉤子工具&#xff0c;測試一下Conventional Commit插件吧 一、安裝 點擊file-settings 點擊plugins插件&#xff0c;搜索Conventional Commit&#xff0c;點擊install安裝&…

# 電腦每次重啟都自動啟動惠普安裝程序,怎么取消?

電腦每次重啟都自動啟動惠普安裝程序&#xff0c;怎么取消&#xff1f; 一、通過任務管理器禁用&#xff1a; 1&#xff09;右鍵點擊任務欄上的空白區域&#xff0c;選擇 “任務管理器”。 2&#xff09;在任務管理器窗口中&#xff0c;點擊頂部菜單欄上的 “啟動” 選項卡。 3…

QT遇到過的樣式記錄

此帖主要記錄平常工程里遇到的qt樣式 窗口無邊框 原始文檔 void QWidget::setWindowFlag(Qt::WindowType flag, bool on true) Sets the window flag flag on this widget if on is true; otherwise clears the flag. This function was introduced in Qt 5.9. See also se…

軟件設計師中級概念題

軟件過程模型 1. 瀑布模型&#xff1a; 五個階段&#xff1a;需求分析、設計、編碼、測試、運行與維護。 為軟件的開發和維護提供了一種有效的管理模式&#xff0c;它是以文檔作為驅動、合適于軟件需求很明確的軟件項目模型。瀑布模型假設&#xff0c;一個待開發的系統需求是完…

Elasticsearch安裝、入門、基礎API操作、全文檢索、精準查詢、地理查詢、復合查詢、排序、分頁、高亮、數據聚合、自動補全、數據同步、ES集群

學習資料&#xff1a; 通過網盤分享的文件&#xff1a;Elasticsearch 鏈接: https://pan.baidu.com/s/18BxA0BH0G–jwy95uFmFZQ 提取碼: yyds 初識ES正向索引倒排索引ES與MySQL 概念對比安裝ES操作索引庫mapping屬性創建索引庫{"mappings": {"properties":…

教程:如何查看瀏覽器擴展程序的源碼

在學習前端、自動化或擴展開發時&#xff0c;我們常常會想研究某個瀏覽器插件的實現邏輯。即使擴展沒有公開源碼&#xff0c;只要我們本地安裝了它&#xff0c;就可以查看它的完整源代碼進行學習。? 方法一&#xff1a;從瀏覽器插件目錄提取源碼 第一步&#xff1a;打開擴展程…

虛擬儲能與分布式光伏協同優化:新型電力系統的靈活性解決方案

安科瑞顧強摘要&#xff1a; 在全球能源結構向低碳化、智能化加速轉型的背景下&#xff0c;分布式光伏的大規模接入為電力系統帶來機遇的同時&#xff0c;也因其波動性與間歇性帶來了運行挑戰。本文聚焦于虛擬儲能系統&#xff08;Virtual Energy Storage System, VESS&#xf…

java valueOf方法

一,什么是valueOf方法?valueOf是java包裝類(比如Long,Integer等)中提供的一個靜態方法二,valueOf的主要作用是什么主要作用是將其他類型的數據轉換為當前包裝類的對象三,代碼實例:咱們以Long.valueOf為例,1,他可以接受一個long類型的數值,返回對應的Long對象(把基本類型long包…

工業平板電腦 vs 消費級平板:從防護等級到使用壽命全方面對比

平板電腦已經廣泛應用于各個行業。但你知道嗎&#xff1f;市面上常見的“平板”其實可以分為兩大類&#xff1a;工業平板電腦和消費級平板電腦。雖然它們看起來都是“平板”&#xff0c;但用途、性能和適用場景卻大不相同。今天&#xff0c;我們就來聊聊這兩者的區別&#xff0…

MySQL技術筆記-索引+慢 SQL+鎖 全鏈路優化實戰

目錄 前言 MySQL索引 一、概述 二、索引分類 &#xff08;一&#xff09;按功能特性分類 &#xff08;二&#xff09;按存儲方式分類 &#xff08;三&#xff09;按數據結構分類 &#xff08;四&#xff09;按索引字段數量分類 三、索引的優缺點 &#xff08;一&…

S7-1200 與 S7-300 PNS7-400 PN UDP 通信 TIA 相同項目

7-1200 與 S7-300 PN/S7-400 PN UDP 通信 TIA 相同項目S7-1200 與 S7-300 PN 口之間的以太網通信可以通過 UDP 協議來實現&#xff0c;使用的通信指令是在雙方 CPU 調用通信-開放式用戶通信TSEND_C&#xff0c;TRCV_C&#xff08;1200支持&#xff0c;300不支持&#xff09;或T…

java進階(二)+學習筆記

面向對象設計原則1. 面向對象概念面向對象 是一種編程思想&#xff0c;面向過程是關注實現的步驟&#xff0c;每個步驟定義一個函數&#xff0c;調用函數執行即可。面向對象關注的是誰(對象)來執行&#xff0c; 把具有相同屬性和行為的一類事物(對象)進行抽象成類&#…

[附源碼+數據庫+畢業論]基于Spring Boot+mysql+vue結合內容推薦算法的學生咨詢系統

摘要 隨著互聯網的普及&#xff0c;學生在學習和生活中面臨著海量信息&#xff0c;如何高效獲取有價值的內容成為亟待解決的問題。本文基于 Spring Boot 框架&#xff0c;結合內容推薦算法&#xff0c;設計并實現了一個學生咨詢系統。系統采用 Spring Boot MyBatis MySQL Vu…