利用Qt創建一個模擬問答系統

?

  1. 界面:
  • 添加了聊天顯示區域(QTextEdit)
  • 添加了發送按鈕和清空對話按鈕
  • 優化了布局和窗口大小
  • 添加了時間戳顯示

?2、功能:

  • 支持實時對話
  • 可以清空對話歷史
  • 支持按回車發送消息
  • 添加了簡單的關鍵詞匹配響應系統
  1. 交互體驗:
  • 消息自動滾動到底部
  • 清晰的用戶/AI消息區分
  • 時間戳顯示
  • 更友好的界面提示

目前的?getAIResponse?函數使用了一個簡單的關鍵詞匹配系統來模擬AI響應

具體代碼:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QScrollArea>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void handleSendMessage();void handleClearChat();private:void appendMessage(const QString &message, bool isUser);QString getAIResponse(const QString &userInput);QWidget *centralWidget;QVBoxLayout *mainLayout;QTextEdit *chatDisplay;QLineEdit *inputField;QPushButton *sendButton;QPushButton *clearButton;QScrollArea *scrollArea;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QDateTime>
#include <QScrollBar>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 創建中心部件centralWidget = new QWidget(this);setCentralWidget(centralWidget);// 創建主布局mainLayout = new QVBoxLayout(centralWidget);// 創建聊天顯示區域chatDisplay = new QTextEdit(this);chatDisplay->setReadOnly(true);chatDisplay->setStyleSheet("QTextEdit { background-color: #f5f5f5; }");mainLayout->addWidget(chatDisplay);// 創建輸入區域QHBoxLayout *inputLayout = new QHBoxLayout();inputField = new QLineEdit(this);inputField->setPlaceholderText("輸入你的問題...");inputLayout->addWidget(inputField);sendButton = new QPushButton("發送", this);inputLayout->addWidget(sendButton);clearButton = new QPushButton("清空對話", this);inputLayout->addWidget(clearButton);mainLayout->addLayout(inputLayout);// 連接信號和槽connect(sendButton, &QPushButton::clicked, this, &MainWindow::handleSendMessage);connect(clearButton, &QPushButton::clicked, this, &MainWindow::handleClearChat);connect(inputField, &QLineEdit::returnPressed, this, &MainWindow::handleSendMessage);// 設置窗口標題和大小setWindowTitle("AI 問答系統");resize(600, 400);// 添加歡迎消息appendMessage("你好!我是AI助手,有什么我可以幫你的嗎?", false);
}MainWindow::~MainWindow()
{
}void MainWindow::handleSendMessage()
{QString userInput = inputField->text().trimmed();if (userInput.isEmpty()) {return;}// 顯示用戶消息appendMessage(userInput, true);inputField->clear();// 獲取并顯示AI響應QString aiResponse = getAIResponse(userInput);appendMessage(aiResponse, false);
}void MainWindow::handleClearChat()
{chatDisplay->clear();appendMessage("你好!我是AI助手,有什么我可以幫你的嗎?", false);
}void MainWindow::appendMessage(const QString &message, bool isUser)
{QString timestamp = QDateTime::currentDateTime().toString("hh:mm:ss");QString formattedMessage = QString("[%1] %2: %3\n").arg(timestamp).arg(isUser ? "你" : "AI").arg(message);chatDisplay->append(formattedMessage);// 滾動到底部QScrollBar *scrollbar = chatDisplay->verticalScrollBar();scrollbar->setValue(scrollbar->maximum());
}QString MainWindow::getAIResponse(const QString &userInput)
{// 這里是一個簡單的模擬響應QString response;if (userInput.contains("你好") || userInput.contains("hi") || userInput.contains("hello")) {response = "你好!很高興見到你。";}else if (userInput.contains("名字")) {response = "我是AI助手,你可以叫我小智。";}else if (userInput.contains("天氣")) {response = "抱歉,我目前無法獲取實時天氣信息。";}else if (userInput.contains("謝謝") || userInput.contains("感謝")) {response = "不客氣!如果還有其他問題,隨時問我。";}else if (userInput.contains("再見") || userInput.contains("拜拜")) {response = "再見!祝你有愉快的一天!";}else {response = "我理解你的問題,但可能需要更具體的描述。你能詳細說明一下嗎?";}return response;
}

?main.cpp

#include "mainwindow.h"#include <QApplication>
#include <QLocale>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication a(argc, argv);// QTranslator translator;// const QStringList uiLanguages = QLocale::system().uiLanguages();// for (const QString &locale : uiLanguages) {//     const QString baseName = "QtDemo_" + QLocale(locale).name();//     if (translator.load(":/i18n/" + baseName)) {//         a.installTranslator(&translator);//         break;//     }// }MainWindow w;w.show();return a.exec();
}

?QtDemo.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.uiTRANSLATIONS += \QtDemo_zh_CN.ts
CONFIG += lrelease
CONFIG += embed_translations# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

?運行

?看不懂你的話可以先看第一個Qt項目

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

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

相關文章

神經光子渲染:物理級真實感圖像生成——從麥克斯韋方程到深度學習

一、技術背景與核心突破 2025年&#xff0c;神經光子渲染&#xff08;Photonic Neural Rendering, PNR&#xff09;技術通過物理光學方程與神經輻射場的深度融合&#xff0c;在AIGC檢測工具&#xff08;如GPTDetector 5.0&#xff09;的識別準確率從98%降至12%。該技術突破性地…

Linux中手動安裝7-Zip軟件文檔

7zip位于EPEL源中&#xff0c;如果服務器可以聯網或者配置了本地EPEL源則可以直接安裝 yum install p7zip p7zip-plugins -y對于無法聯網且沒有配置本地EPEL源的服務器&#xff0c;可以通過官網下載安裝包后&#xff0c;上傳至服務器&#xff0c;手動安裝 ## 下載地址&#x…

[密碼學基礎]GM/T 0018-2023 密碼設備應用接口規范深度解析:技術革新與開發者實踐

GM/T 0018-2023 密碼設備應用接口規范深度解析&#xff1a;技術革新與開發者實踐 GM/T 0018-2023《密碼設備應用接口規范》是中國密碼行業的重要標準&#xff0c;于2023年12月4日發布&#xff0c;2024年6月1日正式實施&#xff0c;替代了2012年版標準。該標準旨在規范密碼設備…

8.QT-按鈕類控件|Push Button|Radio Button|Check Box|Tool Button(C++)

Push Button 使? QPushButton 表??個按鈕.這也是當前我們最熟悉的?個控件了. QPushButton 繼承? QAbstractButton .這個類是?個抽象類.是其他按鈕的?類 在Qt Designer中也能夠看到這?的繼承關系 屬性說明text按鈕中的?本icon按鈕中的圖標iconSize按鈕中圖標的尺?sh…

CFIS-YOLO:面向邊緣設備的木材缺陷檢測輕量級網絡解析

論文地址:https://arxiv.org/pdf/2504.11305 目錄 一、論文核心貢獻 二、創新點詳解 2.1 CARAFE動態上采樣 工作原理 優勢對比 2.2 C2f_FNB輕量模塊 計算效率 2.3 Inner-SIoU損失函數 三、實驗驗證 3.1 消融實驗 3.2 對比實驗 四、應用部署 4.1 邊緣設備部署流程…

BUUCTF PWN刷題筆記(1-9)

才知道&#xff0c;由于棧對齊&#xff0c;直接動調看棧估計會錯&#xff0c;用cyclic看 1.test_your_nc NC連接一下&#xff0c;這個網站似乎直接訪問是不中的&#xff0c;懷疑是沒開啟web的端口。NC鏈接輸入cat flag就OK了&#xff0c;應該只是讓我這樣的小菜鳥培養自信用的…

C#處理網絡傳輸中不完整的數據流

1、背景 在讀取byte數組的場景&#xff08;例如&#xff1a;讀取文件、網絡傳輸數據&#xff09;中&#xff0c;特別是網絡傳輸的場景中&#xff0c;非常有可能接收了不完整的byte數組&#xff0c;在將byte數組轉換時&#xff0c;因字符的缺失/增多&#xff0c;轉為亂碼。如下…

PostgreSQL 用戶資源管理

PostgreSQL 用戶資源管理 PostgreSQL 提供了多種機制來管理和限制用戶對數據庫資源的使用&#xff0c;以下是全面的資源管理方法&#xff1a; 1 連接限制 1.1 限制最大連接數 -- 在 postgresql.conf 中設置 max_connections 100 -- 全局最大連接數-- 為特定用戶設置連接限…

新書速覽|OpenCV計算機視覺開發實踐:基于Qt C++

《OpenCV計算機視覺開發實踐:基于Qt C》 本書內容 OpenCV是計算機視覺領域的開發者必須掌握的技術。《OpenCV計算機視覺開發實踐:基于Qt C》基于 OpenCV 4.10與Qt C進行編寫&#xff0c;全面系統地介紹OpenCV的使用及實戰案例&#xff0c;并配套提供全書示例源碼、PPT課件與作…

【上位機——MFC】消息映射機制

消息映射機制 Window消息分類消息映射機制的使用代碼示例 MFC框架利用消息映射機制把消息、命令與它們的處理函數映射起來。具體實現方法是在每個能接收和處理消息的類中&#xff0c;定義一個消息和消息函數指針對照表&#xff0c;即消息映射表。 在不重寫WindowProc虛函數的大…

docker學習筆記2-最佳實踐

一、在容器中啟動mysql的最佳實踐 &#xff08;一&#xff09;查找目錄 1、mysql的配置文件路徑 /etc/mysql/conf.d 2、mysql的數據目錄 /var/lib/mysql 3、環境變量 4、端口 mysql的默認端口3306。 &#xff08;二&#xff09;啟動命令 docker run -d -p 3306:3306 …

Vue3核心源碼解析

/packages/complier-core 定位??&#xff1a;??編譯時核心??&#xff0c;處理 Vue 模板的編譯邏輯。??核心功能??&#xff1a; ??模板解析??&#xff1a;將 .vue 文件的模板語法&#xff08;HTML-like&#xff09;解析為 ??抽象語法樹 (AST)??。??轉換優化…

n8n 中文系列教程_05.如何在本機部署/安裝 n8n(詳細圖文教程)

n8n 是一款強大的開源工作流自動化工具&#xff0c;可幫助你連接各類應用與服務&#xff0c;實現自動化任務。如果你想快速體驗 n8n 的功能&#xff0c;本機部署是最簡單的方式。本教程將手把手指導你在 Windows 或 MacOS 上通過 Docker 輕松安裝和運行 n8n&#xff0c;無需服務…

【python】pyCharm常用快捷鍵使用-(2)

pyCharm常用快捷鍵使用 快速導入任意類 【CTRLALTSPACE】代碼補全【CTRLSHIFTENTER】代碼快速修正【ALTENTER】代碼調試快捷鍵

Docker 鏡像、容器和 Docker Compose的區別

前言&#xff1a;Docker 的鏡像、容器和 Docker Compose 是容器化技術的核心組件&#xff0c;以下是對它們的詳細解析及使用場景說明。 ??1、Docker 鏡像&#xff08;Image&#xff09;?? ??定義??&#xff1a; 鏡像是只讀模板&#xff0c;包含運行應用程序所需的代碼、…

算法——背包問題(分類)

背包問題&#xff08;Knapsack Problem&#xff09;是一類經典的組合優化問題&#xff0c;廣泛應用于資源分配、投資決策、貨物裝載等領域。根據約束條件和問題設定的不同&#xff0c;背包問題主要分為以下幾種類型&#xff1a; 1. 0-1 背包問題&#xff08;0-1 Knapsack Probl…

多路由器通過RIP動態路由實現通訊(單臂路由)

多路由器通過RIP動態路由實現通訊&#xff08;單臂路由&#xff09; R1(開啟端口并配置IP) Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shu Router(config-if)#no shutdown Router(config-if)#ip add 192.168.10.254 255.255.255.0 Router(c…

從底層設計原理分析并理解SQL 的執行順序

?一、執行順序的底層設計原理?? ??1. 數據源的確定與連接&#xff08;FROM → ON → JOIN&#xff09;?? ??FROM??&#xff1a;數據庫首先需要確定數據的物理來源&#xff0c;從磁盤加載表或子查詢的原始數據。此時尚未應用任何篩選&#xff0c;僅讀取元數據&#…

游戲引擎學習第237天:使用 OpenGL 顯示圖像

win32_game.cpp: 禁用 PFD_DOUBLEBUFFER 我們正在處理一個新的開發階段&#xff0c;目標是在使用 OpenGL 渲染的同時能正常通過 OBS 進行直播。昨天我們已經嘗試了一整天來解決這個問題&#xff0c;希望能找到一種方式讓 OBS 能正確地捕捉到 OpenGL 的窗口畫面。雖然我們不確定…

(二)mac中Grafana監控Linux上的MySQL(Mysqld_exporter)

框架&#xff1a;GrafanaPrometheusMysqld_exporter 一、監控查看端安裝 Grafana安裝-CSDN博客 普羅米修斯Prometheus監控安裝&#xff08;mac&#xff09;-CSDN博客 1.啟動Grafana服務 brew services start grafana 打開瀏覽器輸入http://localhost:3000進入grafana登錄…