优化文本输出和优化渲染
This commit is contained in:
parent
41a78331fe
commit
27701be2e3
Binary file not shown.
112
build/.ninja_log
112
build/.ninja_log
@ -1,75 +1,63 @@
|
||||
# ninja log v6
|
||||
4748 8878 7626095344479039 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj e3d97ea8bc1d2b2c
|
||||
302 529 7626054468283748 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
|
||||
20 312 7626110238955525 ctai_autogen/timestamp da3870ebc94b983e
|
||||
313 18539 7626110241890638 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
|
||||
282 1037 7626126587503169 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
|
||||
18 4707 7626178974330825 ctai_autogen/timestamp da3870ebc94b983e
|
||||
4716 27348 7626171843740194 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
|
||||
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
|
||||
4864 36817 7625506355308043 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
|
||||
4976 42558 7626100271278798 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
|
||||
4967 37911 7626100271193199 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
|
||||
4753 10111 7626095344533870 CMakeFiles/ctai.dir/qrc_res.cpp.obj dd75527ee8dace65
|
||||
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
4971 44642 7626100271233155 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
4719 39095 7626178975475971 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
|
||||
4713 35554 7626178975415913 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
|
||||
1040 3803 7626126587682989 CMakeFiles/ctai.dir/qrc_res.cpp.obj dd75527ee8dace65
|
||||
18 4707 7626178974330825 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
4715 40361 7626178975435898 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
6820 11551 7626094937733457 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 5b4f3fa17aadf05d
|
||||
4962 48705 7626100271140359 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
|
||||
20 312 7626110238955525 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
4710 43893 7626178975383532 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
|
||||
18 4707 7626178974330825 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
4751 18066 7626095344513825 CMakeFiles/ctai.dir/src/sui_title.cpp.obj 226322322265d1f8
|
||||
4973 43773 7626100271256523 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
|
||||
4717 39808 7626178975450957 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
|
||||
4857 36686 7625506355235589 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
|
||||
6815 11759 7626094937673639 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 97bcecdc81f8d69a
|
||||
4969 7174 7626100271213174 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj e7088975ee9d75b9
|
||||
308 24704 7626106165519846 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
|
||||
4712 35257 7626178975395928 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
|
||||
6804 11907 7626094937567230 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj f2014334430e71bd
|
||||
6823 11650 7626094937761135 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj eeafbafed35daaf2
|
||||
4980 5212 7626100271326872 CMakeFiles/ctai.dir/sui.rc.obj 8caec2f89e692c3b
|
||||
4960 50397 7626100271120321 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
|
||||
302 529 7626054468283748 qrc_res.cpp 9794859fafc6825
|
||||
4742 18062 7626095344408993 CMakeFiles/ctai.dir/src/sui.cpp.obj 42bed78c7899bffd
|
||||
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
18539 29807 7626110424156190 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
4745 24869 7626095344451563 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 4278f5aab5827fc6
|
||||
4978 44360 7626100271298778 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
|
||||
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
|
||||
18 5097 7626113129573703 ctai_autogen/timestamp da3870ebc94b983e
|
||||
18 5097 7626113129573703 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
18 5097 7626113129573703 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
18 5097 7626113129573703 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
5102 27531 7626113130732535 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
|
||||
5107 40373 7626113130794872 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
|
||||
5105 41606 7626113130777479 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
|
||||
5110 41840 7626113130818153 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
|
||||
5104 42037 7626113130759961 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
5100 45613 7626113130715147 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
|
||||
5098 47450 7626113130697750 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
|
||||
47451 59001 7626113554232029 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
26 5281 7626118030849102 ctai_autogen/timestamp da3870ebc94b983e
|
||||
26 5281 7626118030849102 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
26 5281 7626118030849102 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
26 5281 7626118030849102 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
18 5237 7626118451724977 ctai_autogen/timestamp da3870ebc94b983e
|
||||
18 5237 7626118451724977 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
18 5237 7626118451724977 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
18 5237 7626118451724977 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
5242 27105 7626118452872000 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
|
||||
5250 39767 7626118452959188 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
|
||||
5248 41203 7626118452924396 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
|
||||
5253 41395 7626118452969228 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
|
||||
5245 41406 7626118452907010 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
5240 44971 7626118452856952 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
|
||||
5238 46923 7626118452822166 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
|
||||
46923 59102 7626118869689173 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
19 296 7626124060032869 ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 296 7626124060032869 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
19 296 7626124060032869 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 296 7626124060032869 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
322 18468 7626124063044093 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
|
||||
18469 29607 7626124244517930 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
17 281 7626126577458232 ctai_autogen/timestamp da3870ebc94b983e
|
||||
17 281 7626126577458232 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
17 281 7626126577458232 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
17 281 7626126577458232 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
4708 46038 7626178975361596 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
|
||||
282 1037 7626126587503169 qrc_res.cpp 9794859fafc6825
|
||||
282 1037 7626126587503169 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
|
||||
1040 3803 7626126587682989 CMakeFiles/ctai.dir/qrc_res.cpp.obj dd75527ee8dace65
|
||||
1037 34133 7626126587638131 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
34133 46017 7626126918603861 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
4742 18062 7626095344408993 CMakeFiles/ctai.dir/src/sui.cpp.obj 42bed78c7899bffd
|
||||
18 4707 7626178974330825 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
46038 56681 7626179388667379 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
4745 24869 7626095344451563 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 4278f5aab5827fc6
|
||||
4722 40298 7626178975502704 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
|
||||
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
|
||||
27 4841 7626186990787268 ctai_autogen/timestamp da3870ebc94b983e
|
||||
27 4841 7626186990787268 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
27 4841 7626186990787268 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
27 4841 7626186990787268 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
4845 38476 7626186991899501 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
|
||||
4848 38502 7626186991911900 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
|
||||
4854 42324 7626186991972333 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
|
||||
4852 43426 7626186991952352 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
|
||||
4856 43949 7626186991997495 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
|
||||
4850 44083 7626186991942360 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
|
||||
4844 47745 7626186991877447 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
|
||||
4842 49598 7626186991858828 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
|
||||
49599 62092 7626187439419987 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
19 294 7626189314556534 ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 294 7626189314556534 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
19 294 7626189314556534 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 294 7626189314556534 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
295 25940 7626189317306680 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
|
||||
25940 38380 7626189573770446 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
19 249 7626190002126353 ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 249 7626190002126353 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
19 249 7626190002126353 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
19 249 7626190002126353 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
250 23941 7626190004429008 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
|
||||
23942 34788 7626190241357552 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
20 248 7626194102965162 ctai_autogen/timestamp da3870ebc94b983e
|
||||
20 248 7626194102965162 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
20 248 7626194102965162 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
|
||||
20 248 7626194102965162 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
|
||||
249 25955 7626194105249164 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
|
||||
25955 37664 7626194362300410 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
release/ctai.exe
BIN
release/ctai.exe
Binary file not shown.
@ -17,7 +17,7 @@ ctai_curl::~ctai_curl()
|
||||
size_t stream_callback(void *buffer, size_t sz, size_t nmemb, void *userdata)
|
||||
{
|
||||
auto ctx = static_cast<call_back_context *>(userdata);
|
||||
std::unique_lock<std::mutex> lock(ctx->instance->m_mutex);
|
||||
std::lock_guard<std::mutex> lock(ctx->instance->m_mutex);
|
||||
size_t size = sz * nmemb;
|
||||
std::string chunk(static_cast<char *>(buffer), size);
|
||||
if (ctx->m_data.postback_stream_mode)
|
||||
@ -25,7 +25,6 @@ size_t stream_callback(void *buffer, size_t sz, size_t nmemb, void *userdata)
|
||||
ctx->instance->send_stream(ctx->m_data, chunk);
|
||||
}
|
||||
qDebug() << "steam data chunk:" << chunk;
|
||||
lock.unlock();
|
||||
return sz * nmemb;
|
||||
}
|
||||
// 非流式输出回调
|
||||
|
||||
@ -61,26 +61,30 @@ void ctai_history_textedit::init_layout(msg_type msg_type_mode)
|
||||
m_msg_user_del->setObjectName("m_msg_user_del");
|
||||
header_info_Layout->addWidget(m_msg_user_del);
|
||||
}
|
||||
|
||||
// 4. 历史信息QTextEdit
|
||||
// 4.分割线区域
|
||||
hLine = new QFrame;
|
||||
hLine->setFrameShape(QFrame::HLine); // 关键属性
|
||||
hLine->setLineWidth(1); // 线宽
|
||||
// 5. 历史信息QTextEdit
|
||||
historyLayout = new QVBoxLayout();
|
||||
m_msg_history = new QTextEdit();
|
||||
m_msg_history->setAcceptRichText(true);
|
||||
m_msg_history->setLineWrapMode(QTextEdit::WidgetWidth);
|
||||
m_msg_history->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
// 启用ViewportAttribute以优化渲染
|
||||
m_msg_history->viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
|
||||
// 添加性能优化设置
|
||||
m_msg_history->setUndoRedoEnabled(false); // 禁用撤销重做
|
||||
m_msg_history->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
|
||||
m_msg_history->setObjectName("m_msg_history");
|
||||
m_msg_history->setReadOnly(true);
|
||||
historyLayout->addWidget(m_msg_history);
|
||||
historyLayout->addWidget(hLine);
|
||||
historyLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
// 5.分割线区域
|
||||
QFrame *hLine = new QFrame;
|
||||
hLine->setFrameShape(QFrame::HLine); // 关键属性
|
||||
hLine->setFrameShadow(QFrame::Sunken); // 凹陷效果
|
||||
hLine->setLineWidth(2); // 线宽
|
||||
// 组合布局
|
||||
mainLayout->addLayout(headerLayout);
|
||||
mainLayout->addLayout(historyLayout);
|
||||
mainLayout->addWidget(hLine);
|
||||
mainLayout->addItem(bottom_spacer);
|
||||
mainLayout->setStretch(0, 1);
|
||||
mainLayout->setSpacing(1);
|
||||
@ -107,44 +111,65 @@ void ctai_history_textedit::connect_signals(msg_type msg_type_mode)
|
||||
}
|
||||
void ctai_history_textedit::on_text_height()
|
||||
{
|
||||
// 强制立即更新文档布局
|
||||
m_msg_history->document()->adjustSize();
|
||||
// 防抖动处理:如果上次更新在100ms内,则延迟处理
|
||||
static QTimer debounceTimer;
|
||||
debounceTimer.setSingleShot(true);
|
||||
|
||||
// 获取文档尺寸前确保布局已更新
|
||||
m_msg_history->document()->setTextWidth(m_msg_history->viewport()->width());
|
||||
|
||||
// 获取文档尺寸
|
||||
QSize docSize = m_msg_history->document()->size().toSize();
|
||||
qDebug() << "文档宽度:" << m_msg_history->document()->textWidth();
|
||||
qDebug() << "文档实际高度:" << docSize.height();
|
||||
|
||||
if (docSize.height() == 0)
|
||||
if (debounceTimer.isActive())
|
||||
{
|
||||
// 如果高度仍为0,使用替代方法计算
|
||||
int textHeight = m_msg_history->document()->documentLayout()->documentSize().height();
|
||||
docSize.setHeight(textHeight);
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算实际需要的高度 (包含边距和视口边框)
|
||||
int newHeight = docSize.height() +
|
||||
m_msg_history->document()->documentMargin() * 2 +
|
||||
m_msg_history->frameWidth() * 2;
|
||||
// 保存折叠前的高度
|
||||
m_original_height = newHeight;
|
||||
// 设置新的固定高度
|
||||
if (m_msg_history->height() != newHeight) {
|
||||
m_msg_history->setFixedHeight(newHeight);
|
||||
emit height_changed(); // 发送高度变化信号
|
||||
|
||||
// 强制更新几何布局
|
||||
updateGeometry();
|
||||
|
||||
// 通知父容器重新计算所有项的大小
|
||||
if (QWidget *parent = parentWidget()) {
|
||||
QEvent e(QEvent::LayoutRequest);
|
||||
QApplication::sendEvent(parent, &e);
|
||||
// 使用viewport宽度作为缓存
|
||||
static int lastWidth = 0;
|
||||
int currentWidth = m_msg_history->viewport()->width();
|
||||
|
||||
// 只在宽度变化时才重新计算
|
||||
if (lastWidth != currentWidth)
|
||||
{
|
||||
m_msg_history->document()->setTextWidth(currentWidth);
|
||||
lastWidth = currentWidth;
|
||||
}
|
||||
|
||||
// 直接使用documentLayout获取高度,避免多次计算
|
||||
int textHeight = m_msg_history->document()->documentLayout()->documentSize().height();
|
||||
|
||||
if (textHeight > 0)
|
||||
{
|
||||
// 计算实际需要的高度 (包含边距和视口边框)
|
||||
int newHeight = textHeight +
|
||||
m_msg_history->document()->documentMargin() * 2 +
|
||||
m_msg_history->frameWidth() * 2;
|
||||
|
||||
// 添加高度阈值判断,避免微小变化触发更新
|
||||
static const int HEIGHT_THRESHOLD = 5; // 5像素的阈值
|
||||
if (abs(m_msg_history->height() - newHeight) > HEIGHT_THRESHOLD)
|
||||
{
|
||||
m_original_height = newHeight;
|
||||
|
||||
// 批量更新布局
|
||||
bool wasBlocked = m_msg_history->signalsBlocked();
|
||||
m_msg_history->blockSignals(true);
|
||||
|
||||
m_msg_history->setFixedHeight(newHeight);
|
||||
updateGeometry();
|
||||
|
||||
m_msg_history->blockSignals(wasBlocked);
|
||||
emit height_changed();
|
||||
|
||||
// 延迟发送布局更新请求
|
||||
if (QWidget *parent = parentWidget())
|
||||
{
|
||||
QTimer::singleShot(100, [parent]()
|
||||
{
|
||||
QEvent e(QEvent::LayoutRequest);
|
||||
QApplication::sendEvent(parent, &e); });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 设置下一次检查的延迟
|
||||
debounceTimer.start(100);
|
||||
}
|
||||
// tokens按钮实现功能的槽函数
|
||||
void ctai_history_textedit::on_tokens_clicked()
|
||||
@ -189,22 +214,22 @@ void ctai_history_textedit::on_save_clicked()
|
||||
}
|
||||
if (!m_msg_save_text)
|
||||
{
|
||||
m_msg_save_text = new QAction(tr("保存为文本"));
|
||||
m_msg_save_text = new QAction(tr("另存为文本"));
|
||||
connect(m_msg_save_text, SIGNAL(triggered(bool)), this, SLOT(on_save_text()));
|
||||
}
|
||||
if (!m_msg_save_html)
|
||||
{
|
||||
m_msg_save_html = new QAction(tr("保存为HTML"));
|
||||
m_msg_save_html = new QAction(tr("另存为HTML"));
|
||||
connect(m_msg_save_html, SIGNAL(triggered(bool)), this, SLOT(on_save_html()));
|
||||
}
|
||||
if (!m_msg_save_markdown)
|
||||
{
|
||||
m_msg_save_markdown = new QAction(tr("保存为Markdown"));
|
||||
m_msg_save_markdown = new QAction(tr("另存为Markdown"));
|
||||
connect(m_msg_save_markdown, SIGNAL(triggered(bool)), this, SLOT(on_save_markdown()));
|
||||
}
|
||||
if (!m_msg_save_pdf)
|
||||
{
|
||||
m_msg_save_pdf = new QAction(tr("保存为PDF"));
|
||||
m_msg_save_pdf = new QAction(tr("另存为PDF"));
|
||||
connect(m_msg_save_pdf, SIGNAL(triggered(bool)), this, SLOT(on_save_pdf()));
|
||||
}
|
||||
m_msg_save_menu->addAction(m_msg_save_text);
|
||||
@ -225,6 +250,7 @@ void ctai_history_textedit::on_fold_clicked()
|
||||
}
|
||||
void ctai_history_textedit::add_message(const model_data &message)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
QString disp_data;
|
||||
QString disp_header;
|
||||
if (message.msg_type_mode == SYSTEM)
|
||||
@ -263,9 +289,10 @@ void ctai_history_textedit::on_copy_clicked()
|
||||
|
||||
void ctai_history_textedit::on_save_text()
|
||||
{
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
tr("保存消息"), "",
|
||||
tr("文本文件 (*.txt);;所有文件 (*)"));
|
||||
tr("保存消息"), m_msg_sned_id + ".txt",
|
||||
tr("文本文件 (*.txt)"));
|
||||
|
||||
if (fileName.isEmpty())
|
||||
return;
|
||||
@ -279,9 +306,7 @@ void ctai_history_textedit::on_save_text()
|
||||
}
|
||||
|
||||
QTextStream out(&file);
|
||||
out << m_msg_header->text() << "\n\n";
|
||||
out << m_msg_history->toPlainText() << "\n\n";
|
||||
out << m_msg_tokens->text();
|
||||
}
|
||||
void ctai_history_textedit::on_save_html()
|
||||
{
|
||||
|
||||
@ -17,6 +17,8 @@
|
||||
#include <QMenu>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QTimer>
|
||||
#include <mutex>
|
||||
#include <QAbstractTextDocumentLayout>
|
||||
#include "ctai_base.h"
|
||||
#include "ctai_parsestring.h"
|
||||
@ -33,6 +35,8 @@ typedef struct tokens_args{
|
||||
QString cache_miss_tokens={};
|
||||
}tokens_data;
|
||||
|
||||
std::mutex m_mutex;
|
||||
|
||||
class ctai_history_textedit : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -59,6 +63,7 @@ private:
|
||||
void init_layout(msg_type msg_type_mode);
|
||||
void connect_signals(msg_type msg_type_mode); // 连接信号和槽
|
||||
private:
|
||||
QFrame *hLine;
|
||||
QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
QVBoxLayout *mainLayout={};
|
||||
QVBoxLayout *headerLayout={};
|
||||
|
||||
@ -16,7 +16,7 @@ void ctai_history_widget::setup_table()
|
||||
verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
// 设置自动滚动属性
|
||||
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
//滚动步长
|
||||
// 滚动步长
|
||||
verticalScrollBar()->setSingleStep(10);
|
||||
}
|
||||
|
||||
@ -90,28 +90,16 @@ void ctai_history_widget::add_message(const model_data &message)
|
||||
}
|
||||
void ctai_history_widget::on_widget_height_changed()
|
||||
{
|
||||
// 暂时阻止滚动条更新以避免闪烁
|
||||
setUpdatesEnabled(false);
|
||||
|
||||
// 保存当前滚动位置
|
||||
QScrollBar* vscroll = verticalScrollBar();
|
||||
bool was_at_bottom = vscroll->value() >= vscroll->maximum() - 10;
|
||||
|
||||
// 重新计算所有行高
|
||||
for (int row = 0; row < rowCount(); ++row) {
|
||||
int row = currentRow();
|
||||
if (row >= 0 && row < rowCount()) {
|
||||
int currentHeight = rowHeight(row);
|
||||
setRowHeight(row, currentHeight + 32);
|
||||
resizeRowToContents(row);
|
||||
}
|
||||
|
||||
// 恢复滚动条位置
|
||||
if (was_at_bottom) {
|
||||
scrollToBottom();
|
||||
}
|
||||
|
||||
// 重新启用更新
|
||||
setUpdatesEnabled(true);
|
||||
}
|
||||
scrollToBottom();
|
||||
}
|
||||
void ctai_history_widget::on_msg_remove(QString send_id)
|
||||
{
|
||||
{
|
||||
int row = this->rowCount();
|
||||
if (row >= 0)
|
||||
{
|
||||
|
||||
@ -48,7 +48,7 @@ void ctai_session_info::init_sub_layout()
|
||||
m_sub_systeam_widget->setLayout(m_session_systeam_info_layout);
|
||||
|
||||
m_session_user_group_layout = new QVBoxLayout();
|
||||
m_session_user_edit_info = new QTextEdit(tr("1+1为什么等于2?"));
|
||||
m_session_user_edit_info = new QTextEdit(tr("写一篇关于天然气的论文"));
|
||||
m_session_user_edit_layout = new QVBoxLayout();
|
||||
m_session_user_edit_layout->addWidget(m_session_user_edit_info);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user