diff --git a/res.qrc b/res.qrc
index f2ca1d7..a47d34d 100644
--- a/res.qrc
+++ b/res.qrc
@@ -16,6 +16,7 @@
res/img/btn/default_header.png
res/img/btn/btn_msg_menu.png
+ res/img/btn/btn_info_browser.png
res/img/btn/btn_info_copy.png
res/img/btn/btn_info_delete.png
res/img/btn/btn_info_down.png
diff --git a/res/img/btn/btn_info_browser.png b/res/img/btn/btn_info_browser.png
new file mode 100644
index 0000000..82ca495
Binary files /dev/null and b/res/img/btn/btn_info_browser.png differ
diff --git a/res/qss/light_style.qss b/res/qss/light_style.qss
index 78a121c..b249fe3 100644
--- a/res/qss/light_style.qss
+++ b/res/qss/light_style.qss
@@ -94,6 +94,13 @@ QPushButton#m_msg_copy{
background-color: #FFFFFF;
image:url(":/res/img/btn/btn_info_copy.png");
}
+QPushButton#m_msg_browser{
+ height:25px;
+ width:25px;
+ border:none;
+ background-color: #FFFFFF;
+ image:url(":/res/img/btn/btn_info_browser.png");
+}
QPushButton#m_msg_save{
height:25px;
width:25px;
diff --git a/src/ctaiHistoryTextEdit.cpp b/src/ctaiHistoryTextEdit.cpp
index 9b192d8..ae821a1 100644
--- a/src/ctaiHistoryTextEdit.cpp
+++ b/src/ctaiHistoryTextEdit.cpp
@@ -123,8 +123,9 @@ void ctaiHistoryTextEdit::connect_signals(msg_type msg_type_mode)
connect(m_msg_tokens, SIGNAL(clicked()), this, SLOT(on_tokens_slots()));
connect(m_msg_tools, SIGNAL(on_signals_display_mode(QString)), this, SLOT(on_display_changed(QString)));
connect(m_msg_tools, SIGNAL(on_signals_display_font_size()), this, SLOT(on_display_font_size_changed()));
+ connect(m_msg_tools, SIGNAL(on_signals_send_browser()), this, SLOT(on_send_browser()));
// save菜单功能
- connect(m_msg_tools, SIGNAL(on_signals_save_file(int)), this, SLOT(on_save_file(int)));
+ connect(m_msg_tools, SIGNAL(on_signals_save_file(QString,int)), this, SLOT(on_save_file(QString,int)));
// 其他功能菜单
connect(m_msg_tools, SIGNAL(on_signals_menu()), this, SLOT(on_menu_slots()));
}
@@ -134,6 +135,11 @@ void ctaiHistoryTextEdit::connect_signals(msg_type msg_type_mode)
}
connect(m_msg_history, SIGNAL(textChanged()), this, SLOT(on_sync_text_height()));
}
+void ctaiHistoryTextEdit::on_send_browser(){
+ QString save_path=QDir::currentPath()+"/html/"+m_msg_sned_id+".html";
+ on_save_file(save_path,1);
+ QDesktopServices::openUrl(save_path);
+}
void ctaiHistoryTextEdit::on_menu_slots()
{
}
@@ -153,20 +159,17 @@ void ctaiHistoryTextEdit::on_copy_slots()
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(text);
}
-void ctaiHistoryTextEdit::on_save_file(int index)
+void ctaiHistoryTextEdit::on_save_file(QString save_path,int index)
{
- QString fileName;
QString temp_current_content;
- fileName = QFileDialog::getSaveFileName(this, tr("保存消息"), m_msg_sned_id + save_extend[index], save_extend_str[index]);
- if (fileName.isEmpty())
- {
- return;
+ if(save_path.isEmpty()){
+ save_path = QFileDialog::getSaveFileName(this, tr("保存消息"), m_msg_sned_id + save_extend[index], save_extend_str[index]);
}
- QFile file(fileName);
+ QFile file(save_path);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::warning(this, tr("保存失败"),
- tr("无法保存文件 %1:\n%2").arg(fileName).arg(file.errorString()));
+ tr("无法保存文件 %1:\n%2").arg(save_path).arg(file.errorString()));
return;
}
QTextStream out(&file);
@@ -186,7 +189,7 @@ void ctaiHistoryTextEdit::on_save_file(int index)
}
if (!temp_current_content.isEmpty())
{
- out << m_current_content << "\n\n";
+ out << temp_current_content << "\n\n";
}
file.close();
}
@@ -212,6 +215,8 @@ void ctaiHistoryTextEdit::on_display_changed(QString mode)
else if (mode == "HTML渲染" || mode == "Markdown渲染")
{
m_msg_history->setHtml(m_math_convert->replace_tags_svg(m_current_content, m_msg_tools->getFontSize().toInt()));
+ QTextDocument *doc = m_msg_history->document();
+ doc->adjustSize();
}
}
void ctaiHistoryTextEdit::on_tokens_slots()
diff --git a/src/ctaiHistoryTextEdit.h b/src/ctaiHistoryTextEdit.h
index b471d44..1ee9f06 100644
--- a/src/ctaiHistoryTextEdit.h
+++ b/src/ctaiHistoryTextEdit.h
@@ -26,6 +26,7 @@
#include
#include
#include
+#include
// Qt对话框
#include
#include
@@ -36,7 +37,6 @@
#include "ctai_base.h"
#include "ctaiMathConvert.h"
#include "ctaiHistoryTools.h"
-
typedef struct tokens_args
{
QString prompt_tokens = {};
@@ -70,8 +70,9 @@ private slots:
void on_display_changed(QString); // 显示模式改变
void on_display_font_size_changed(); // 字体大小改变
void on_sync_text_height();
- void on_save_file(int); // 保存文本
+ void on_save_file(QString,int); // 保存文本
void on_menu_slots();
+ void on_send_browser();
signals:
void delete_requested(QString); // 请求删除此消息
void row_height_changed(bool);
@@ -91,8 +92,8 @@ private:
QPushButton *m_msg_system_header_ico = {};
QPushButton *m_msg_user_header_ico = {};
- QLineEdit *m_msg_header = {};
- QTextEdit *m_msg_history = {};
+ QLineEdit *m_msg_header = {};
+ QTextEdit *m_msg_history = {};
QPushButton *m_msg_user_del = {};
QPushButton *m_msg_system_del = {};
QPushButton *m_msg_tokens = {};
diff --git a/src/ctaiHistoryTools.cpp b/src/ctaiHistoryTools.cpp
index f458de7..b59dd56 100644
--- a/src/ctaiHistoryTools.cpp
+++ b/src/ctaiHistoryTools.cpp
@@ -12,6 +12,7 @@ void ctaiHistoryTools::initLayout()
{
// 消息功能区
header_opts_Layout = new QHBoxLayout();
+ m_msg_browser=new QPushButton();
m_msg_copy = new QPushButton();
m_msg_save = new QPushButton();
m_msg_menu = new QPushButton();
@@ -28,6 +29,7 @@ void ctaiHistoryTools::initLayout()
m_msg_display_font_size_combobox->setObjectName("m_msg_font_size_combobox");
m_msg_display_font_label->setObjectName("m_msg_font_label");
m_msg_display_font_combobox->setObjectName("m_msg_font_combobox");
+ m_msg_browser->setObjectName("m_msg_browser");
m_msg_copy->setObjectName("m_msg_copy");
m_msg_save->setObjectName("m_msg_save");
m_msg_menu->setObjectName("m_msg_menu");
@@ -42,6 +44,7 @@ void ctaiHistoryTools::initLayout()
header_opts_Layout->addWidget(m_msg_display_font_size_combobox);
header_opts_Layout->addWidget(m_msg_display_label);
header_opts_Layout->addWidget(m_msg_display_combobox);
+ header_opts_Layout->addWidget(m_msg_browser);
header_opts_Layout->addWidget(m_msg_copy);
header_opts_Layout->addWidget(m_msg_save);
header_opts_Layout->addWidget(m_msg_menu);
@@ -68,6 +71,7 @@ void ctaiHistoryTools::initDisplayMode()
}
void ctaiHistoryTools::initConnect()
{
+ connect(m_msg_browser, SIGNAL(clicked()), this, SIGNAL(on_signals_send_browser()));
connect(m_msg_copy, SIGNAL(clicked()), this, SIGNAL(on_signals_copy()));
connect(m_msg_save, SIGNAL(clicked()), this, SLOT(on_save_menu_slots()));
connect(m_msg_menu, SIGNAL(clicked()), this, SLOT(on_opts_menu_slots()));
@@ -98,7 +102,7 @@ void ctaiHistoryTools::on_save_menu_slots()
}
void ctaiHistoryTools::on_save_action_slots(){
save_index=sender()->objectName().toInt();
- emit on_signals_save_file(save_index);
+ emit on_signals_save_file({},save_index);
}
void ctaiHistoryTools::on_opts_menu_slots()
{
diff --git a/src/ctaiHistoryTools.h b/src/ctaiHistoryTools.h
index 32cd46b..77190fd 100644
--- a/src/ctaiHistoryTools.h
+++ b/src/ctaiHistoryTools.h
@@ -22,6 +22,7 @@ public:
QString getFont();
private:
QHBoxLayout *header_opts_Layout = {};
+ QPushButton *m_msg_browser={};
QPushButton *m_msg_copy = {};
QPushButton *m_msg_save = {};
QPushButton *m_msg_menu = {};
@@ -50,7 +51,8 @@ signals:
void on_signals_fold();
void on_signals_display_mode(QString);
void on_signals_display_font_size();
- void on_signals_save_file(int);
+ void on_signals_save_file(QString,int);
+ void on_signals_send_browser();
public slots:
void on_save_menu_slots();
void on_opts_menu_slots();
diff --git a/src/ctaiHistoryWidget.cpp b/src/ctaiHistoryWidget.cpp
index eacbd2a..8202faa 100644
--- a/src/ctaiHistoryWidget.cpp
+++ b/src/ctaiHistoryWidget.cpp
@@ -17,7 +17,7 @@ void ctaiHistoryWidget::setup_table()
// 设置自动滚动属性
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
// 滚动步长
- verticalScrollBar()->setSingleStep(5);
+ verticalScrollBar()->setSingleStep(10);
}
ctaiHistoryWidget::~ctaiHistoryWidget()
diff --git a/src/ctaiMathConvert.cpp b/src/ctaiMathConvert.cpp
index 40fd00d..234bae9 100644
--- a/src/ctaiMathConvert.cpp
+++ b/src/ctaiMathConvert.cpp
@@ -36,7 +36,7 @@ QString ctaiMathConvert::math_convert_svg(const QString &math)
painter.setRenderHints(QPainter::TextAntialiasing | QPainter::Antialiasing);
Graphics2D_qt g2(&painter);
render->draw(g2, m_padding, m_padding);
- save_svg(pix);
+ // save_svg(pix);
return QString::fromUtf8(svg_to_base64(pix));
}
@@ -67,7 +67,7 @@ QString ctaiMathConvert::clean_latex_for_mula(const QString &formula)
QString ctaiMathConvert::replace_tags_svg(const QString &text, int font_size)
{
- m_text_size = font_size*1.5;
+ m_text_size = font_size * 1.5;
QString result = text;
// 使用改进的正则表达式模式
QRegularExpression latexPattern(
@@ -119,6 +119,7 @@ QString ctaiMathConvert::markdown_to_html(const QString &text)
// 启用所有 GFM 扩展选项
int options = CMARK_OPT_SOURCEPOS |
CMARK_OPT_VALIDATE_UTF8 |
+ CMARK_OPT_HARDBREAKS |
CMARK_OPT_SMART |
CMARK_OPT_GITHUB_PRE_LANG |
CMARK_OPT_LIBERAL_HTML_TAG |
@@ -138,6 +139,55 @@ QString ctaiMathConvert::markdown_to_html(const QString &text)
char *html = cmark_render_html(doc, options, NULL);
// 转换回QString并处理代码块
QString result = QString::fromUtf8(html);
+ // 添加基础CSS样式
+ const QString css = R"(
+
+ )";
+ // 在标签后插入CSS
+ result.replace("", "" + css);
+ result.replace("