// ctaitextedit.h #ifndef CTAIHISTORYTEXTEDIT_H #define CTAIHISTORYTEXTEDIT_H // Qt核心组件 #include #include #include #include // Qt布局相关 #include #include #include // Qt控件相关 #include #include #include #include #include #include #include #include #include #include #include #include #include // Qt对话框 #include #include // Qt WebEngine // 系统相关 #include // 项目相关头文件 #include "ctai_base.h" #include "ctaiMathConvert.h" #include "ctaiHistoryTools.h" #include "QCefWidget/CefWidget.h" std::mutex m_mutex; class ctaiHistoryTextEdit : public QWidget { Q_OBJECT public: ctaiHistoryTextEdit(QWidget *parent = nullptr); ~ctaiHistoryTextEdit(); void initLayout(msg_type msg_type_mode); void initMsgHeaderLayout(msg_type msg_type_mode); void initMsgHistoryLayout(); void initMsgLine(); void addUserMessage(const model_data &message); void addSystemMessage(const model_data &message); void updateTokensMessage(const model_data &message); void addHeaderMessage(const model_data &message); private slots: void slotsOnDelete(); // 删除按钮 void slotsOnCopy(); // 复制按钮 void slotsOnFold(); // 折叠按钮 void slotsOnTokens(); // tokens按钮 void slotsOnDisplay(QString); // 显示模式改变 void slotsOnDisplayFontSize(); // 字体大小改变 void slotsOnSyncHeight(); void slotsOnSave(QString,int); // 保存文本 void slotsOnOptsMenu(); void slotsOnSendBrowser(); void slotsHisResToSend(); signals: void signalsDeleteMsg(QString); // 请求删除此消息 void signalsRowHeightChanged(bool); void signalsEditHisResToSend(QString,HISTORY_SEND_MODE); private: void connect_signals(msg_type msg_type_mode); // 连接信号和槽 void set_default_opts(); private: CefWidget* m_cef_widget={}; ctaiMathConvert *m_math_convert; QFrame *msg_line; QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed); QVBoxLayout *main_layout = {}; QVBoxLayout *header_layout = {}; QHBoxLayout *header_info_layout = {}; QHBoxLayout *header_opts_layout = {}; QVBoxLayout *history_layout = {}; QPushButton *m_msg_system_header_ico = {}; QPushButton *m_msg_user_header_ico = {}; QLineEdit *m_msg_header = {}; QTextEdit *m_msg_history = {}; QPushButton *m_msg_fold = {}; QPushButton *m_msg_delete = {}; QPushButton *m_msg_tokens = {}; QPushButton *m_history_to_send = {}; QPushButton *m_restart_to_send = {}; // 信息功能区 ctaiHistoryTools *m_msg_tools = {}; // tokens消耗显示 QMenu *m_msg_tokens_menu = {}; QAction *m_menu_prompt_tokens = {}; QAction *m_menu_completion_tokens = {}; QAction *m_menu_total_tokens = {}; QAction *m_menu_cache_hit_tokens = {}; QAction *m_menu_cache_miss_tokens = {}; //WebEngine // 保存展开时的原始高度 int m_original_height = 0; // 折叠状态 bool m_is_folded = false; // 本次会话的tokens消耗信息 tokens_data m_tokens_data; // 本次信息ID QString m_msg_sned_id = {}; // 本次信息 QString m_current_content; //粗体字 bool m_bold=false; std::vector save_extend={".txt",".html",".md",".pdf"}; std::vector save_extend_str={"文本文件 (*.txt)","HTML 文件 (*.html)","Markdown 文件 (*.md)","PDF 文件 (*.pdf)"}; QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding); }; #endif // ctai_history_textedit_H