1-增加保存功能丰富化

2-增加只适应行高
This commit is contained in:
JackLee 2025-03-02 16:19:15 +08:00
parent cb7c8682fd
commit 8e3ac1f177
25 changed files with 6146 additions and 5099 deletions

View File

@ -93,7 +93,9 @@
"unordered_set": "cpp",
"csignal": "cpp",
"set": "cpp",
"qmenu": "cpp"
"qmenu": "cpp",
"qstandarditemmodel": "cpp",
"qscrollbar": "cpp"
},
"editor.gotoLocation.alternativeDeclarationCommand": "editor.action.revealDefinition",
"editor.gotoLocation.alternativeDefinitionCommand": "editor.action.revealDefinition",

Binary file not shown.

View File

@ -1,91 +1,51 @@
# ninja log v6
5018 46024 7626049232766887 CMakeFiles/ctai.dir/src/ctai.cpp.obj 3f2a5605474560c6
7476 12546 7625226031323242 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj a4bdc9e7afd693e6
531 3299 7626054468385965 CMakeFiles/ctai.dir/qrc_res.cpp.obj e5933d51f0b4b61f
5020 36473 7626049232801708 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj 73164b1399d3eab1
5027 40894 7626049232871934 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30048396fe45a344
4864 36817 7625506355308043 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
19 257 7626058147644632 ctai_autogen/timestamp da3870ebc94b983e
5460 32424 7625338166333098 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj fcfee72ebd436b69
302 529 7626054468283748 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
12546 18489 7625226082021822 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 1472cbef2eb3486
5022 42185 7626049232819103 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 10a736dff755075d
19 257 7626058147644632 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 257 7626058147644632 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
12954 29954 7625226086103060 CMakeFiles/ctai.dir/src/sui_title.cpp.obj b2aaa7db0ee20801
5025 41659 7626049232836502 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 8c93ec888621ab29
4857 36686 7625506355235589 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
7471 12954 7625226031266263 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 16410c8fb1699807
7467 11761 7625226031231442 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj a7b9c7c27f09d2d2
258 26211 7626058150026365 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj af29f93889df7bb3
7460 13107 7625226031167985 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj 9283b8e99a8aaac0
7478 12469 7625226031344445 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj 35441b03d6ed42c6
4776 47217 7625462302748234 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj e347e488b3f7bdf
249 473 7625435056614594 qrc_res.cpp 9794859fafc6825
11761 27811 7625226074178138 CMakeFiles/ctai.dir/src/sui.cpp.obj 62600b24a26e62c1
27 4775 7625462301749330 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
47217 58635 7625462727149688 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
27 4775 7625462301749330 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
5460 32424 7625338166333098 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj fcfee72ebd436b69
27 4775 7625462301749330 ctai_autogen/timestamp da3870ebc94b983e
4780 36626 7625462302801186 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
12469 38682 7625226081243748 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 1394551dd9df8e22
12954 29954 7625226086103060 CMakeFiles/ctai.dir/src/sui_title.cpp.obj b2aaa7db0ee20801
4783 41826 7625462302826685 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 10a736dff755075d
4778 45588 7625462302778476 CMakeFiles/ctai.dir/src/ctai.cpp.obj 3f2a5605474560c6
7476 12546 7625226031323242 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj a4bdc9e7afd693e6
476 3102 7625435056760498 CMakeFiles/ctai.dir/qrc_res.cpp.obj e5933d51f0b4b61f
4787 40725 7625462302857982 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30048396fe45a344
18489 19694 7625226141459392 CMakeFiles/ctai.dir/sui.rc.obj ba94315dae7b8c27
4789 36936 7625462302876835 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
27 4775 7625462301749330 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
249 473 7625435056614594 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
12546 18489 7625226082021822 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 1472cbef2eb3486
4785 41302 7625462302838166 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 8c93ec888621ab29
4792 41539 7625462302911178 CMakeFiles/ctai.dir/src/main.cpp.obj 92e0a8f8e94288b6
19 268 7625465021750242 ctai_autogen/timestamp da3870ebc94b983e
19 268 7625465021750242 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
19 268 7625465021750242 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 268 7625465021750242 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
268 25901 7625465024229550 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
25901 36557 7625465280568829 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
21 267 7625466228081417 ctai_autogen/timestamp da3870ebc94b983e
21 267 7625466228081417 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
21 267 7625466228081417 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
21 267 7625466228081417 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
267 21965 7625466230543815 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
21965 32806 7625466447527069 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
35 299 7625467313827130 ctai_autogen/timestamp da3870ebc94b983e
35 299 7625467313827130 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
35 299 7625467313827130 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
35 299 7625467313827130 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
300 23374 7625467316479304 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
23375 35460 7625467547226951 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
21 259 7625469337861889 ctai_autogen/timestamp da3870ebc94b983e
21 259 7625469337861889 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
21 259 7625469337861889 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
21 259 7625469337861889 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
260 25356 7625469340255864 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
25356 36102 7625469591214442 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
17 257 7625471915032345 ctai_autogen/timestamp da3870ebc94b983e
17 257 7625471915032345 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 257 7625471915032345 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
17 257 7625471915032345 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
259 22212 7625471917467142 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
257 22499 7625471917449752 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
22499 34367 7625472139864554 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
24 4794 7625474569996138 ctai_autogen/timestamp da3870ebc94b983e
24 4794 7625474569996138 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
24 4794 7625474569996138 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
24 4794 7625474569996138 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4810 36766 7625474571150491 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
4801 37111 7625474571055429 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
4808 40725 7625474571132656 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30048396fe45a344
4806 41571 7625474571107605 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 8c93ec888621ab29
4803 41877 7625474571072820 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 10a736dff755075d
4813 42020 7625474571179709 CMakeFiles/ctai.dir/src/main.cpp.obj 92e0a8f8e94288b6
4798 45423 7625474571037930 CMakeFiles/ctai.dir/src/ctai.cpp.obj 3f2a5605474560c6
4795 47269 7625474570995387 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj e347e488b3f7bdf
17 11583 7625475185530325 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
18 4841 7625478530652534 ctai_autogen/timestamp da3870ebc94b983e
18 4841 7625478530652534 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 4841 7625478530652534 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 4841 7625478530652534 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 239 7625478841512641 ctai_autogen/timestamp da3870ebc94b983e
17 239 7625478841512641 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 239 7625478841512641 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
17 239 7625478841512641 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
252 33576 7625478843877696 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
243 34318 7625478843787328 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
250 37994 7625478843849731 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30048396fe45a344
247 38775 7625478843822117 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 8c93ec888621ab29
255 39165 7625478843906091 CMakeFiles/ctai.dir/src/main.cpp.obj 92e0a8f8e94288b6
245 39311 7625478843804724 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 10a736dff755075d
241 43061 7625478843769929 CMakeFiles/ctai.dir/src/ctai.cpp.obj 3f2a5605474560c6
239 44879 7625478843735039 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj e347e488b3f7bdf
44879 56547 7625479290133919 F:/SourceCode/ctai/release/ctai.exe b586bbd8722aa11a
5015 48054 7626049232746701 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj e347e488b3f7bdf
302 529 7626054468283748 qrc_res.cpp 9794859fafc6825
11761 27811 7625226074178138 CMakeFiles/ctai.dir/src/sui.cpp.obj 62600b24a26e62c1
19 257 7626058147644632 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
26211 37172 7626058409564173 F:/SourceCode/ctai/release/ctai.exe 4d63155bd63d4759
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
5030 42198 7626049232889373 CMakeFiles/ctai.dir/src/main.cpp.obj 92e0a8f8e94288b6
12469 38682 7625226081243748 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 1394551dd9df8e22
18 284 7626059905775969 ctai_autogen/timestamp da3870ebc94b983e
18 284 7626059905775969 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 284 7626059905775969 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 284 7626059905775969 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
284 21680 7626059908425901 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj af29f93889df7bb3
286 21947 7626059908443292 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj 73164b1399d3eab1
21947 32564 7626060125050139 F:/SourceCode/ctai/release/ctai.exe 4d63155bd63d4759
18 288 7626061353726438 ctai_autogen/timestamp da3870ebc94b983e
18 288 7626061353726438 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 288 7626061353726438 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 288 7626061353726438 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
289 23339 7626061356423946 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj af29f93889df7bb3
23339 34080 7626061586927035 F:/SourceCode/ctai/release/ctai.exe 4d63155bd63d4759
19 282 7626066857285238 ctai_autogen/timestamp da3870ebc94b983e
19 282 7626066857285238 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
19 282 7626066857285238 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 282 7626066857285238 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
283 25120 7626066859921594 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj 73164b1399d3eab1
25121 36364 7626067108304791 F:/SourceCode/ctai/release/ctai.exe 4d63155bd63d4759

View File

@ -437,9 +437,15 @@
null
],
[
"F:/SourceCode/ctai/src/ctai_msg_table.h",
"F:/SourceCode/ctai/src/ctai_history_textedit.h",
"MU",
"UVLADIE3JM/moc_ctai_msg_table.cpp",
"UVLADIE3JM/moc_ctai_history_textedit.cpp",
null
],
[
"F:/SourceCode/ctai/src/ctai_history_widget.h",
"MU",
"UVLADIE3JM/moc_ctai_history_widget.cpp",
null
],
[
@ -484,12 +490,6 @@
"UVLADIE3JM/moc_ctai_tabwidget.cpp",
null
],
[
"F:/SourceCode/ctai/src/ctai_textedit.h",
"MU",
"UVLADIE3JM/moc_ctai_textedit.cpp",
null
],
[ "F:/SourceCode/ctai/src/sui.h", "MU", "UVLADIE3JM/moc_sui.cpp", null ],
[
"F:/SourceCode/ctai/src/sui_base.h",
@ -603,7 +603,8 @@
[ "F:/SourceCode/ctai/src/ctai.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_cmd.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_curl.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_msg_table.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_history_textedit.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_history_widget.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_parsestring.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_info.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_setting.cpp", "MU", null ],
@ -611,7 +612,6 @@
[ "F:/SourceCode/ctai/src/ctai_switch_control.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_tabbar.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_tabwidget.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_textedit.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/main.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/sui.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/sui_base_ex.cpp", "MU", null ],

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -314,6 +314,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxpfunctional.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxptype_traits.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qyieldcpu.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAbstractTextDocumentLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAction \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QActionGroup \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QClipboard \
@ -479,7 +480,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -526,7 +526,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -1086,7 +1085,8 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
F:/SourceCode/ctai/src/ctai_base.h \
F:/SourceCode/ctai/src/ctai_cmd.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_history_textedit.h \
F:/SourceCode/ctai/src/ctai_history_widget.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_setting.h \
@ -1094,7 +1094,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
F:/SourceCode/ctai/src/ctai_switch_control.h \
F:/SourceCode/ctai/src/ctai_tabbar.h \
F:/SourceCode/ctai/src/ctai_tabwidget.h \
F:/SourceCode/ctai/src/ctai_textedit.h \
F:/SourceCode/ctai/src/sui.h \
F:/SourceCode/ctai/src/sui_base.h \
F:/SourceCode/ctai/src/sui_base_ex.h \

View File

@ -307,12 +307,14 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxpfunctional.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxptype_traits.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qyieldcpu.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAbstractTextDocumentLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QClipboard \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QMouseEvent \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QPainter \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QPainterPath \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QTextDocument \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QTransform \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qabstracttextdocumentlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qaction.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qbitmap.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qbrush.h \
@ -322,8 +324,10 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qevent.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qeventpoint.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qfont.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qfontdatabase.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qfontinfo.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qfontmetrics.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qglyphrun.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qguiapplication.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qguiapplication_platform.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qicon.h \
@ -341,6 +345,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qpixmap.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qpointingdevice.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qpolygon.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qrawfont.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qregion.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qrgb.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qrgba64.h \
@ -349,6 +354,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtextcursor.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtextdocument.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtextformat.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtextlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtextoption.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtgui-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/qtguiexports.h \
@ -374,7 +380,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QScrollBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QSplitter \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -414,7 +419,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -964,12 +968,12 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
F:/SourceCode/ctai/3rdparty/md4qt/md4qt/visitor.h \
F:/SourceCode/ctai/src/ctai_base.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_history_textedit.h \
F:/SourceCode/ctai/src/ctai_history_widget.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_setting.h \
F:/SourceCode/ctai/src/ctai_switch_control.h \
F:/SourceCode/ctai/src/ctai_textedit.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/curl.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/curlver.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/easy.h \

View File

@ -308,6 +308,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxpfunctional.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxptype_traits.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qyieldcpu.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAbstractTextDocumentLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QClipboard \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QMouseEvent \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QPaintEvent \
@ -387,7 +388,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -429,7 +429,6 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -980,14 +979,14 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
F:/SourceCode/ctai/src/ctai_base.h \
F:/SourceCode/ctai/src/ctai_cmd.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_history_textedit.h \
F:/SourceCode/ctai/src/ctai_history_widget.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_setting.h \
F:/SourceCode/ctai/src/ctai_session_widget.h \
F:/SourceCode/ctai/src/ctai_switch_control.h \
F:/SourceCode/ctai/src/ctai_tabbar.h \
F:/SourceCode/ctai/src/ctai_textedit.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/curl.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/curlver.h \
F:/SourceCode/vcpkg/installed/x64-mingw-static/include/curl/easy.h \

View File

@ -313,6 +313,7 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxpfunctional.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qxptype_traits.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/qyieldcpu.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAbstractTextDocumentLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QAction \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QActionGroup \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QClipboard \
@ -478,7 +479,6 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -525,7 +525,6 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -1402,8 +1401,10 @@ ctai_autogen/timestamp: \
F:/SourceCode/ctai/src/ctai_cmd.h \
F:/SourceCode/ctai/src/ctai_curl.cpp \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.cpp \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_history_textedit.cpp \
F:/SourceCode/ctai/src/ctai_history_textedit.h \
F:/SourceCode/ctai/src/ctai_history_widget.cpp \
F:/SourceCode/ctai/src/ctai_history_widget.h \
F:/SourceCode/ctai/src/ctai_parsestring.cpp \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.cpp \
@ -1418,8 +1419,6 @@ ctai_autogen/timestamp: \
F:/SourceCode/ctai/src/ctai_tabbar.h \
F:/SourceCode/ctai/src/ctai_tabwidget.cpp \
F:/SourceCode/ctai/src/ctai_tabwidget.h \
F:/SourceCode/ctai/src/ctai_textedit.cpp \
F:/SourceCode/ctai/src/ctai_textedit.h \
F:/SourceCode/ctai/src/main.cpp \
F:/SourceCode/ctai/src/sui.cpp \
F:/SourceCode/ctai/src/sui.h \

View File

@ -2,14 +2,14 @@
#include "UVLADIE3JM/moc_ctai.cpp"
#include "UVLADIE3JM/moc_ctai_cmd.cpp"
#include "UVLADIE3JM/moc_ctai_curl.cpp"
#include "UVLADIE3JM/moc_ctai_msg_table.cpp"
#include "UVLADIE3JM/moc_ctai_history_textedit.cpp"
#include "UVLADIE3JM/moc_ctai_history_widget.cpp"
#include "UVLADIE3JM/moc_ctai_session_info.cpp"
#include "UVLADIE3JM/moc_ctai_session_setting.cpp"
#include "UVLADIE3JM/moc_ctai_session_widget.cpp"
#include "UVLADIE3JM/moc_ctai_switch_control.cpp"
#include "UVLADIE3JM/moc_ctai_tabbar.cpp"
#include "UVLADIE3JM/moc_ctai_tabwidget.cpp"
#include "UVLADIE3JM/moc_ctai_textedit.cpp"
#include "UVLADIE3JM/moc_sui.cpp"
#include "UVLADIE3JM/moc_sui_sys_style.cpp"
#include "UVLADIE3JM/moc_sui_title.cpp"

View File

@ -65542,78 +65542,79 @@ static const unsigned char qt_resource_data[] = {
0x3b,0xd,0xa,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x2d,0x74,0x6f,0x70,0x3a,
0x31,0x70,0x78,0x3b,0xd,0xa,0x7d,0xd,0xa,
// light_style.qss
0x0,0x0,0x4,0x52,
0x0,0x0,0x4,0x6a,
0x0,
0x0,0x11,0x30,0x78,0xda,0xb5,0x57,0x5b,0x6b,0x1b,0x47,0x14,0x7e,0xb6,0xc1,0xff,
0x61,0x88,0x1e,0x72,0x41,0xaa,0x2e,0x96,0xd3,0xb0,0xa1,0xf,0x52,0x2d,0x97,0x82,
0x63,0x5b,0x44,0x69,0x1e,0x4a,0x59,0x46,0x3b,0xa3,0xd5,0xe0,0xdd,0x9d,0x65,0x77,
0x36,0x92,0x2b,0x2,0x21,0xa5,0x98,0x42,0x8a,0x9e,0xd2,0x24,0x25,0xf,0xa6,0x14,
0xf2,0x94,0x36,0xd0,0x87,0x12,0x9a,0x9f,0x53,0xa9,0xf1,0xbf,0xe8,0xcc,0xec,0x45,
0xbb,0xda,0x8b,0xe2,0x44,0x9e,0x45,0x62,0x75,0xe6,0xcc,0xf9,0xbe,0x33,0xe7,0xcc,
0x99,0xa3,0xee,0x7d,0x82,0x74,0xcc,0x4a,0xa6,0x3a,0x92,0x2f,0x93,0xad,0x4d,0x0,
0xfa,0xd4,0x41,0xd8,0xa9,0x38,0x10,0x11,0xcf,0x55,0xea,0x35,0x7b,0x7c,0x5b,0x8a,
0xa1,0x76,0xac,0x3b,0xd4,0xb3,0x50,0x45,0xa3,0x6,0x75,0x14,0xe0,0xe8,0x7d,0x78,
0xad,0xd1,0xdc,0x2e,0x87,0x9f,0xfa,0x75,0xa9,0xe9,0x4f,0x97,0x1a,0x7b,0x4d,0xfe,
0x70,0xc9,0xc3,0xad,0xcd,0xad,0xcd,0xee,0x91,0xe7,0xe,0xdb,0x1e,0x63,0xd4,0x2a,
0xf5,0x99,0xa5,0x52,0x5b,0xa2,0x11,0x13,0xea,0x58,0xf1,0x1c,0xe3,0x9a,0x52,0x75,
0xb0,0x5b,0x25,0xa6,0x5e,0x75,0x3d,0xf2,0x99,0x6d,0xe9,0xd2,0x18,0xe7,0xc5,0x86,
0xca,0xf6,0x8e,0x4f,0x62,0x88,0x89,0x3e,0x64,0xd1,0x4f,0x9f,0xa9,0x62,0x51,0xb,
0x47,0x30,0xfb,0xb0,0x8f,0x8d,0x49,0x8c,0x46,0xb3,0x26,0x9e,0x2c,0x1a,0xa6,0x6a,
0xe1,0x91,0xaa,0xd,0x21,0x53,0x39,0xa3,0xf2,0xf2,0xa4,0x60,0xe9,0x62,0x26,0x15,
0x32,0x27,0x11,0x36,0xe4,0xe4,0xd6,0xa6,0xc4,0xb,0xa8,0x86,0xfb,0x15,0x72,0xf5,
0x7f,0x3f,0x4c,0xef,0x80,0xe7,0x62,0x27,0x62,0x50,0xce,0x99,0x77,0x47,0x84,0x69,
0x43,0xd5,0xa4,0x1c,0x6c,0x85,0xce,0xb1,0x45,0x47,0x6,0xe6,0x61,0xcc,0xd3,0xf3,
0x6c,0x83,0x42,0xa4,0xe,0x88,0x91,0xab,0xa2,0x19,0x18,0xf2,0x6f,0x6a,0x31,0x3c,
0xce,0xe7,0x84,0x2d,0x44,0x2c,0x5d,0x25,0xd6,0x80,0xc6,0x3c,0x6f,0xec,0x24,0x3d,
0x8f,0x7e,0xa7,0xc2,0xd4,0xfd,0x92,0x9a,0x7d,0xda,0xa6,0xe3,0x49,0x5a,0x3d,0xb9,
0x51,0xca,0x90,0x3e,0xc0,0x8e,0x50,0xb3,0x21,0x12,0xa0,0x15,0x3,0xf,0x98,0x52,
0xf7,0x2d,0x87,0x32,0x46,0xed,0x40,0x14,0xe4,0x0,0x71,0x99,0x9f,0xd9,0x80,0xc7,
0x6,0x24,0xb3,0x57,0x1,0xa5,0x3d,0x39,0x6e,0x87,0xc4,0x80,0x64,0x6,0x7c,0xec,
0xc5,0x5a,0x45,0x21,0xc,0x9b,0xc5,0x16,0xb2,0xd7,0xf8,0xac,0x3f,0x6a,0xa5,0x8b,
0xd,0xac,0x31,0x8c,0xa,0x17,0xe7,0xac,0x1d,0x50,0xcd,0x73,0x3f,0x0,0x55,0xae,
0xb5,0x70,0x7,0x11,0x71,0xf2,0x4d,0x57,0x57,0x87,0x18,0x22,0x7f,0x9b,0x97,0x62,
0x97,0xc,0x5d,0x46,0xd,0x48,0x52,0xea,0xf1,0xac,0x89,0x9b,0xe5,0xc,0xa9,0x73,
0x32,0xb9,0xb0,0xa1,0xe5,0xd3,0xb6,0xe0,0xa8,0x12,0x8d,0x4e,0xd2,0x49,0x5,0xa,
0x2d,0x82,0x58,0x99,0xb9,0xb2,0xa8,0x33,0x3c,0xa1,0xab,0x8,0xf,0xa0,0x67,0xb0,
0xc0,0xba,0x28,0x3b,0x57,0xae,0xa7,0x8f,0xab,0xcf,0x0,0x5,0x85,0x65,0x4d,0xd0,
0xe2,0x3c,0x89,0x23,0x24,0xec,0x62,0x86,0x8b,0xb1,0x35,0x6a,0x9f,0x5c,0xa,0xb8,
0x30,0x5c,0xc,0xed,0xc2,0x7,0xf8,0x52,0xa0,0x85,0xe1,0x62,0x68,0x13,0x5b,0xde,
0xba,0xa1,0x43,0xbb,0xc5,0xc8,0x3,0x6a,0xa0,0x72,0x5a,0xcc,0xe8,0x31,0xb6,0xdc,
0xb,0x53,0x4a,0xa5,0x74,0xbb,0x77,0xa0,0xee,0x1e,0xde,0x3f,0xd8,0x3f,0x6c,0xed,
0x4e,0xa2,0x6b,0xae,0x91,0xbc,0xe6,0x72,0xe,0x61,0xa1,0x77,0x88,0x8e,0x2c,0x51,
0xe5,0xf3,0xbc,0x13,0xc0,0x77,0x3b,0xbd,0xbb,0x6b,0x5,0xe5,0xb7,0x24,0xe3,0x75,
0xb8,0x8,0xf3,0xde,0xd1,0x6e,0xab,0xd7,0x59,0x2b,0xaa,0x67,0x23,0x98,0x7f,0x6c,
0x4,0x68,0xab,0x7d,0x78,0xaf,0xb7,0x56,0x4c,0xd8,0xa7,0x1e,0x4b,0x40,0xf6,0x60,
0xdf,0xc0,0xdf,0x10,0x3c,0x2a,0x7d,0xd5,0xba,0xd3,0x51,0xbf,0x3e,0xd8,0x3b,0x54,
0x7b,0xad,0xf6,0x7e,0x67,0xb9,0xa0,0x8b,0xaa,0xbc,0x91,0x91,0x24,0xb5,0xda,0xe7,
0xb7,0x50,0x33,0x2a,0xcd,0xd5,0x1b,0x95,0xd4,0x98,0x9f,0x9d,0x9e,0xff,0xf6,0x7c,
0x7e,0x36,0x9d,0x9f,0xfd,0x3d,0x7b,0x37,0x5,0xf3,0x97,0x8f,0x66,0x6f,0xa6,0xb3,
0x27,0xbf,0xc8,0xb7,0xdf,0x5f,0x89,0xb7,0xd9,0x8f,0x7f,0x9d,0x3f,0x7b,0x5d,0xc9,
0x1a,0x37,0xaa,0xc2,0x6c,0x64,0x64,0x36,0x7d,0x7e,0x7e,0xca,0xbf,0x1f,0xcf,0x9f,
0xbe,0x99,0x3d,0x7a,0x37,0xfb,0xe3,0xd7,0x7f,0xdf,0xfe,0xb4,0xa4,0xf3,0xfe,0x87,
0x27,0xf3,0x17,0x7f,0xa,0x61,0x37,0x68,0x11,0x79,0x53,0xa6,0x32,0xc2,0xc,0x59,
0xa,0x32,0xdc,0x18,0xc8,0x21,0x36,0xd0,0x84,0x8e,0x4e,0xac,0xd8,0xa5,0x1c,0x4a,
0x1c,0xb9,0xed,0x49,0x59,0x9f,0xf2,0x68,0x99,0x4b,0xc2,0xd8,0x1d,0x9f,0xd1,0x37,
0x99,0xc4,0x2a,0xa7,0x64,0x70,0x9c,0x92,0x69,0x6,0x75,0x5,0xdb,0x8d,0x4,0xfc,
0xb6,0x34,0xbb,0x91,0x84,0xf7,0x7b,0xb4,0x8d,0x64,0xe7,0x7b,0x2b,0xd6,0x51,0xa4,
0x29,0x4c,0x56,0xa5,0xa,0xd7,0x89,0x12,0x25,0x55,0x2c,0xc2,0x8c,0xc,0x9b,0xc5,
0x28,0x27,0x73,0xbb,0x45,0xee,0xe1,0x6a,0x48,0x38,0x5e,0x33,0xe4,0xb7,0xfc,0x43,
0x4c,0xf2,0x3d,0x3e,0x72,0xa8,0x8d,0x1d,0x76,0xf2,0xc5,0xd5,0x50,0x72,0xf5,0x3b,
0x20,0xeb,0xe0,0x5,0x28,0x81,0x4b,0x23,0xc5,0x61,0x79,0xa7,0xf1,0xe1,0x9c,0xd4,
0x60,0xc1,0x7a,0xb9,0x85,0x19,0xb7,0x8a,0x80,0xd4,0xfb,0x34,0xe8,0xcc,0x9c,0xf4,
0xfb,0xce,0xac,0xc3,0x91,0x33,0x23,0x89,0x7c,0x5c,0x8f,0x9d,0x81,0x6e,0x73,0x3f,
0x5d,0x8c,0x32,0xf1,0xf3,0xe6,0x7c,0x6,0xc1,0xec,0x85,0x38,0x64,0x15,0xca,0xee,
0x1d,0x7e,0xb1,0xff,0xf7,0xf8,0xed,0xec,0xf4,0x1f,0xbf,0x54,0xbe,0x9f,0xbe,0x9c,
0xfd,0xfc,0x34,0xb7,0x2a,0x4a,0xfd,0x20,0x65,0x56,0xf4,0x14,0x51,0x90,0x0,0x67,
0x0,0x5c,0x6a,0x10,0x4,0x4a,0x9d,0x9a,0x78,0x12,0xf3,0x61,0xf5,0x0,0x37,0xc3,
0xd8,0x85,0xf4,0x15,0xb0,0x13,0xdb,0x3f,0x81,0x1c,0xfc,0xc3,0x98,0xa4,0xd5,0x80,
0xb8,0x9c,0xa2,0x97,0x6c,0x80,0x66,0x34,0xe1,0x17,0x33,0x5,0x34,0x22,0x49,0xe8,
0xc0,0xb6,0x1c,0x19,0xa0,0xb1,0x7b,0x29,0xdf,0xfb,0x1d,0xf1,0x2c,0x59,0xac,0xc9,
0x91,0x65,0x31,0x8,0x62,0x81,0xc1,0x8e,0x1c,0x4b,0x6b,0x5d,0x6c,0x43,0x7,0xf2,
0xc3,0x18,0x2e,0xc,0x72,0x1d,0xd4,0x17,0x8e,0x67,0x98,0x8a,0xef,0x7c,0xe8,0xbf,
0xd8,0xaf,0x7a,0x2d,0xbd,0xc9,0xfc,0xef,0xaa,0x16,0x47,0xf0,0x4f,0x17,0xa8,0x2f,
0x42,0x14,0x61,0xde,0x5c,0xda,0x54,0x3f,0xf,0xc3,0xc8,0xfd,0xf,0x76,0xfd,0x90,
0x1e,
0x0,0x11,0x77,0x78,0xda,0xb5,0x57,0x5b,0x6b,0x1b,0x47,0x14,0x7e,0xb6,0xc1,0xff,
0x61,0x88,0x1e,0x12,0x7,0x29,0xba,0x58,0x4e,0xd2,0xd,0x7d,0x90,0x6a,0xb9,0x14,
0x1c,0xdb,0x22,0x4a,0xf3,0x50,0xca,0x32,0xda,0x1d,0xad,0x6,0xef,0xee,0x2c,0xbb,
0xb3,0x91,0x5c,0x11,0x8,0x29,0xc5,0x14,0x52,0xf4,0x94,0x36,0x2d,0x79,0x30,0xa5,
0xd0,0xa7,0xb6,0x81,0x3e,0x94,0xd0,0xfc,0x9c,0x4a,0x8d,0xff,0x45,0xe7,0xb2,0xbb,
0xda,0xab,0x14,0xa7,0xf2,0xac,0x65,0x56,0x67,0x66,0xce,0xf7,0x9d,0x39,0x97,0x39,
0xea,0x3e,0xc2,0xba,0x81,0x68,0xc9,0x52,0x47,0xe2,0x65,0xb2,0xb5,0x9,0x40,0x9f,
0xb8,0x3a,0x72,0x2b,0x2e,0xd4,0xb1,0xef,0x29,0xf5,0x9a,0x33,0xbe,0x27,0xc4,0x50,
0x3b,0x31,0x5c,0xe2,0xdb,0x7a,0x45,0x23,0x26,0x71,0x15,0xe0,0x1a,0x7d,0x78,0xa3,
0xd1,0xdc,0x29,0x87,0x9f,0xfa,0xb6,0x58,0x29,0xa7,0x4b,0x8d,0xfd,0x26,0x7b,0x98,
0xe4,0xc9,0xd6,0xe6,0xd6,0x66,0xf7,0xd8,0xf7,0x86,0x6d,0x9f,0x52,0x62,0x97,0xfa,
0xd4,0x56,0x89,0x23,0xd0,0xb0,0x5,0xd,0xa4,0xf8,0xae,0x79,0x43,0xa9,0xba,0xc8,
0xab,0x62,0xcb,0xa8,0x7a,0x3e,0xbe,0xe5,0xd8,0x86,0x50,0xc6,0x78,0xd1,0xa1,0xb2,
0xb3,0x2b,0x49,0xc,0x11,0x36,0x86,0x34,0xfa,0x2a,0x99,0x2a,0x36,0xb1,0x51,0x4,
0x73,0x0,0xfb,0xc8,0x9c,0xc4,0x68,0x34,0x6b,0xfc,0xc9,0xa3,0x61,0xa9,0x36,0x1a,
0xa9,0xda,0x10,0x52,0x95,0x31,0x2a,0xa7,0x27,0x39,0x4b,0xf,0x51,0xb1,0x20,0x77,
0x52,0x47,0xa6,0x98,0xdc,0xda,0x14,0x78,0x1,0xd5,0xf0,0xbc,0x42,0xae,0xf2,0xfb,
0x93,0xec,0x9,0xf8,0x1e,0x72,0x23,0x6,0xe5,0x82,0x79,0x6f,0x84,0xa9,0x36,0x54,
0x2d,0xc2,0xc0,0x56,0xac,0x39,0xb1,0xc9,0xc8,0x44,0xcc,0x8d,0x45,0xeb,0x7c,0xc7,
0x24,0x50,0x57,0x7,0xd8,0x2c,0x5c,0xa2,0x99,0x8,0xb2,0xff,0xc4,0xa6,0x68,0x5c,
0xcc,0x9,0xd9,0x3a,0xb6,0xd,0x15,0xdb,0x3,0x12,0xb3,0xbc,0xb1,0x9b,0xb4,0x3c,
0xfa,0x9e,0x71,0x53,0xf7,0x13,0x62,0xf5,0x49,0x9b,0x8c,0x27,0xd9,0xe5,0xc9,0x83,
0x52,0x86,0xe4,0x31,0x72,0xf9,0x32,0x7,0xea,0x1c,0xb4,0x62,0xa2,0x1,0x55,0xea,
0x52,0x73,0x28,0xa3,0xc4,0x9,0x44,0xd2,0xc7,0x3d,0xd8,0x37,0x91,0xc,0x6d,0xc0,
0x9c,0x3,0x16,0xd1,0x10,0xc4,0xec,0x9d,0xb2,0xfc,0xab,0xdd,0xfa,0x68,0x3b,0x15,
0xdc,0xa,0x28,0xed,0x8b,0x71,0x2f,0xe4,0xd,0x4,0x71,0x20,0xa9,0xc5,0x54,0x2b,
0xa,0xa6,0xc8,0x8a,0x0,0x72,0x55,0x14,0x6c,0x92,0x66,0x7d,0xd8,0x56,0xf,0x99,
0x48,0xa3,0x48,0x5f,0xba,0xbb,0x68,0xf3,0x80,0x68,0xbe,0xf7,0x1e,0xb8,0x3c,0x91,
0xb0,0x8d,0x3a,0x3a,0xe6,0xc5,0xc1,0xf2,0xc,0x75,0x88,0xa0,0x2e,0x3d,0x91,0x72,
0x6f,0xd2,0xbb,0x39,0x65,0x22,0xc5,0x89,0x5,0x56,0x5c,0x2d,0xf6,0x28,0x71,0x4f,
0x27,0x97,0x56,0x94,0x4e,0xc8,0x5,0x47,0x15,0x6b,0x64,0x92,0x8d,0x3b,0xb0,0x54,
0x23,0x88,0x55,0xa2,0x6b,0x8b,0x52,0xc4,0x62,0xbe,0xaa,0xa3,0x1,0xf4,0x4d,0x1a,
0x68,0xe7,0x95,0xe9,0xda,0x76,0x36,0xa3,0x25,0x3,0x91,0x1f,0xd9,0x54,0x95,0x93,
0xde,0xa9,0xc7,0x7c,0xc0,0xa7,0xd7,0x49,0x8f,0xa7,0x25,0xcf,0x44,0xae,0x17,0x51,
0xb4,0x9c,0x9f,0x46,0x9c,0xd3,0x2b,0x1,0xe7,0x8a,0x97,0x43,0x7b,0xf0,0x31,0xba,
0x12,0x68,0xae,0x78,0x39,0xb4,0x85,0x6c,0x7f,0xdd,0xd0,0xa1,0xde,0xe5,0xc8,0x3,
0x62,0xea,0xe5,0xac,0x98,0x92,0x13,0x64,0x7b,0x97,0xa6,0x94,0x9,0xfb,0x76,0xef,
0x50,0xdd,0x3b,0x7a,0x74,0x78,0x70,0xd4,0xda,0x9b,0x44,0xb7,0x65,0x23,0x79,0x5b,
0x16,0x24,0xea,0x52,0xeb,0x74,0x32,0xb2,0xf9,0x65,0x51,0x64,0x1d,0x7,0x7e,0xd0,
0xe9,0x3d,0x58,0x2b,0x28,0xbb,0x6c,0x29,0x2b,0xe7,0xcb,0x30,0x1f,0x1e,0xef,0xb5,
0x7a,0x9d,0xb5,0xa2,0xfa,0x8e,0xe,0x8b,0xd3,0x86,0x83,0xb6,0xda,0x47,0xf,0x7b,
0x6b,0xc5,0x84,0x7d,0xe2,0xd3,0x4,0xa4,0x28,0xd5,0x9f,0x63,0x34,0x2a,0x7d,0xda,
0xba,0xdf,0x51,0x3f,0x3b,0xdc,0x3f,0x52,0x7b,0xad,0xf6,0x41,0x27,0x5d,0xf5,0x79,
0xe5,0xde,0xc8,0x9,0x92,0x5a,0xed,0xce,0x5d,0xbd,0x19,0x95,0xef,0xea,0xcd,0x4a,
0x66,0xcc,0xcf,0xcf,0x2e,0x7e,0x7e,0x39,0x3f,0x9f,0xce,0xcf,0xff,0x9a,0xbd,0x9d,
0x82,0xf9,0xab,0xa7,0xb3,0xd7,0xd3,0xd9,0xf3,0xef,0xc5,0xdb,0x2f,0xbf,0xf2,0xb7,
0xd9,0x37,0x7f,0x5e,0xfc,0xf0,0x5b,0x25,0x6f,0xdc,0xac,0x72,0xb5,0x91,0x92,0xd9,
0xf4,0xe5,0xc5,0x19,0xfb,0xff,0x6c,0xfe,0xe2,0xf5,0xec,0xe9,0xdb,0xd9,0xef,0x3f,
0xfd,0xf3,0xe6,0xdb,0xd4,0x9a,0x77,0x5f,0x3f,0x9f,0xff,0xf8,0x7,0x17,0x76,0x83,
0x4e,0x93,0xf5,0x76,0x2a,0xc5,0xd4,0x14,0xa5,0x20,0xc7,0x8c,0x81,0x18,0xfc,0x0,
0x2d,0xe8,0x1a,0xd8,0x8e,0xdd,0xed,0xa1,0xc4,0x15,0xc7,0x9e,0x94,0xf5,0x9,0xf3,
0x96,0x95,0x12,0xc6,0x5a,0x85,0x9c,0xf6,0xcb,0xc2,0x76,0x39,0x23,0x83,0xe3,0x8c,
0x4c,0x33,0x89,0xc7,0xd9,0x6e,0x24,0xe0,0x77,0x84,0xda,0x8d,0x24,0xbc,0x6c,0xf5,
0x36,0x92,0xd,0xf4,0xdd,0x58,0x63,0x92,0xa5,0x30,0x59,0x15,0x2a,0x6c,0x4d,0x14,
0x28,0x99,0x62,0x11,0x46,0x64,0xd8,0x73,0x46,0x31,0x59,0xd8,0x74,0x32,0xb,0x57,
0x43,0xc2,0xf1,0x9a,0x21,0xbf,0x60,0x1f,0x6c,0xe1,0xaf,0xd0,0xb1,0x4b,0x1c,0xe4,
0xd2,0xd3,0x8f,0xaf,0x87,0x92,0xeb,0x5f,0x2,0x51,0x7,0x2f,0x41,0x9,0x5c,0x19,
0x29,0x6,0xcb,0xba,0x91,0xf7,0xe7,0xa4,0x6,0x1b,0xd6,0xcb,0x2d,0x8c,0xb8,0x55,
0x4,0xc4,0xba,0xff,0x7,0x9d,0x1b,0x93,0xb2,0x3b,0xcd,0x4b,0x8e,0x82,0x19,0x41,
0xe4,0xc3,0x5a,0xf5,0x1c,0x74,0x87,0xd9,0xe9,0x21,0x3d,0x17,0xbf,0x68,0x4e,0x32,
0x8,0x66,0x2f,0xc5,0x21,0xaf,0x50,0x76,0xef,0xb3,0x8b,0xfd,0xdf,0x67,0x6f,0x66,
0x67,0x7f,0xcb,0x52,0xf9,0x6e,0xfa,0x6a,0xf6,0xdd,0x8b,0xc2,0xaa,0x28,0xd6,0x7,
0x21,0xb3,0xa2,0xa7,0x88,0x9c,0x4,0x18,0x3,0xe0,0x11,0x13,0xeb,0xa0,0xd4,0xa9,
0xf1,0x27,0x31,0x1f,0x56,0xf,0x70,0x3b,0xf4,0x5d,0x48,0x5f,0x1,0xbb,0xb1,0xf3,
0xe3,0xc8,0xc1,0xf,0x91,0x49,0x76,0x19,0xe0,0x97,0x53,0xf4,0x92,0xf,0xd0,0x8c,
0x26,0x64,0x31,0x53,0x40,0x23,0x92,0x84,0x6,0xec,0x88,0x91,0x3,0x1a,0xbb,0x97,
0x8a,0xad,0xdf,0xe5,0x4f,0x4a,0x63,0x4d,0x8c,0x3c,0x8d,0x81,0x13,0x97,0x28,0xec,
0x88,0x91,0xda,0xeb,0x21,0x7,0xba,0x90,0x25,0x63,0xb8,0x31,0x88,0x75,0x50,0x5f,
0x18,0x9e,0xa3,0x2a,0x7e,0xf2,0xa1,0xfd,0xfc,0xbc,0xea,0xb5,0xec,0x21,0xb3,0x5f,
0xbd,0x5a,0x1c,0x41,0x66,0x17,0xa8,0x2f,0x5c,0x14,0x61,0xde,0x4e,0x1d,0xaa,0x8c,
0xc3,0xd0,0x73,0xff,0x1,0x78,0xf3,0xa6,0x84,
// message_style.css
0x0,0x0,0x2,0xeb,
0x0,
@ -65953,11 +65954,11 @@ static const unsigned char qt_resource_struct[] = {
0x0,0x0,0x5,0x46,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xed,0x9e,
0x0,0x0,0x1,0x93,0xf6,0xae,0x2c,0x84,
// :/res/qss/message_style.css
0x0,0x0,0x5,0x8c,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xfc,0xc2,
0x0,0x0,0x5,0x8c,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xfc,0xda,
0x0,0x0,0x1,0x95,0x41,0xc6,0x3,0x63,
// :/res/qss/light_style.qss
0x0,0x0,0x5,0x68,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xf8,0x6c,
0x0,0x0,0x1,0x95,0x52,0x2a,0xf5,0x16,
0x0,0x0,0x1,0x95,0x55,0xdc,0x26,0xb3,
// :/res/img/btn
0x0,0x0,0x0,0xb4,0x0,0x2,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x11,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

Binary file not shown.

View File

@ -40,23 +40,24 @@ QPushButton:hover{
padding-top:1px;
}
QListWidget
QTableWidget
{
color: rgba(27,27,27,0.9);
background: #FFFFFF; border: none;
}
QListWidget::item
QTableWidget::item
{
background: #FFFFFF;
}
QListWidget::item:hover
QTableWidget::item:hover
{
background: #FFFFFF;
}
QListWidget::item:selected
QTableWidget::item:selected
{
background: #FFFFFF;
}
QListWidget::item:focus
QTableWidget::item:focus
{
background: #FFFFFF;
}
@ -76,7 +77,8 @@ QPushButton#m_msg_header_ico{
background-color: #FFFFFF;
image:url(":/res/img/btn/default_header.png");
}
QPushButton#m_msg_del{
QPushButton#m_msg_user_del,
QPushButton#m_msg_system_del{
border:none;
background-color: #FFFFFF;
image:url(":/res/img/btn/btn_info_delete.png");

View File

@ -0,0 +1,325 @@
#include "ctai_history_textedit.h"
ctai_history_textedit::ctai_history_textedit(msg_type msg_type_mode)
{
init_layout(msg_type_mode);
}
ctai_history_textedit::~ctai_history_textedit()
{
}
void ctai_history_textedit::init_layout(msg_type msg_type_mode)
{
// 主垂直布局
mainLayout = new QVBoxLayout();
// 1. 消息头垂直
headerLayout = new QVBoxLayout();
// 消息头水平
header_info_Layout = new QHBoxLayout();
m_msg_header_ico = new QPushButton();
m_msg_header_ico->setObjectName("m_msg_header_ico");
m_msg_header = new QLineEdit();
m_msg_header->setObjectName("m_msg_header");
m_msg_header->setReadOnly(true);
header_info_Layout->addWidget(m_msg_header_ico);
header_info_Layout->addWidget(m_msg_header);
header_info_Layout->setContentsMargins(0, 0, 0, 0);
headerLayout->addLayout(header_info_Layout);
if (msg_type_mode == SYSTEM)
{
// 2.tokens功能按钮
m_msg_tokens = new QPushButton(QIcon(":res/img/btn/btn_info_tokens.png"), NULL);
m_msg_tokens->setObjectName("m_msg_tokens");
header_info_Layout->addWidget(m_msg_tokens);
// 3.消息功能区
header_opts_Layout = new QHBoxLayout();
m_msg_system_del = new QPushButton();
m_msg_copy = new QPushButton();
m_msg_save = new QPushButton();
m_msg_menu = new QPushButton();
m_msg_fold = new QPushButton();
m_msg_system_del->setObjectName("m_msg_system_del");
m_msg_copy->setObjectName("m_msg_copy");
m_msg_save->setObjectName("m_msg_save");
m_msg_menu->setObjectName("m_msg_menu");
m_msg_fold->setObjectName("m_msg_fold");
m_msg_fold->setIcon(QIcon(":res/img/btn/btn_info_up.png"));
header_opts_Layout->addItem(sparcer_item);
header_opts_Layout->addWidget(m_msg_system_del);
header_opts_Layout->addWidget(m_msg_copy);
header_opts_Layout->addWidget(m_msg_save);
header_opts_Layout->addWidget(m_msg_menu);
header_opts_Layout->addWidget(m_msg_fold);
header_opts_Layout->addItem(sparcer_item);
header_opts_Layout->setContentsMargins(0, 0, 0, 0);
headerLayout->addLayout(header_opts_Layout);
}
else
{
m_msg_user_del = new QPushButton();
m_msg_user_del->setObjectName("m_msg_user_del");
header_info_Layout->addWidget(m_msg_user_del);
}
// 4. 历史信息QTextEdit
historyLayout = new QVBoxLayout();
m_msg_history = new QTextEdit();
m_msg_history->setAcceptRichText(true);
m_msg_history->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_msg_history->setObjectName("m_msg_history");
m_msg_history->setReadOnly(true);
historyLayout->addWidget(m_msg_history);
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);
mainLayout->setContentsMargins(0, 0, 0, 0);
setLayout(mainLayout);
connect_signals(msg_type_mode);
}
void ctai_history_textedit::connect_signals(msg_type msg_type_mode)
{
if (msg_type_mode == SYSTEM)
{
connect(m_msg_system_del, SIGNAL(clicked()), this, SLOT(on_delete_clicked()));
connect(m_msg_copy, SIGNAL(clicked()), this, SLOT(on_copy_clicked()));
connect(m_msg_save, SIGNAL(clicked()), this, SLOT(on_save_clicked()));
connect(m_msg_menu, SIGNAL(clicked()), this, SLOT(on_menu_clicked()));
connect(m_msg_fold, SIGNAL(clicked()), this, SLOT(on_fold_clicked()));
connect(m_msg_tokens, SIGNAL(clicked()), this, SLOT(on_tokens_clicked()));
}
else
{
connect(m_msg_user_del, SIGNAL(clicked()), this, SLOT(on_delete_clicked()));
}
connect(m_msg_history->document(), SIGNAL(contentsChanged()), this, SLOT(on_text_height()));
}
void ctai_history_textedit::on_text_height()
{
// 强制立即更新文档布局
m_msg_history->document()->adjustSize();
// 获取文档尺寸前确保布局已更新
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)
{
// 如果高度仍为0使用替代方法计算
int textHeight = m_msg_history->document()->documentLayout()->documentSize().height();
docSize.setHeight(textHeight);
}
// 计算实际需要的高度 (包含边距和视口边框)
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);
}
}
}
// tokens按钮实现功能的槽函数
void ctai_history_textedit::on_tokens_clicked()
{
if (!m_msg_tokens_menu)
{
m_msg_tokens_menu = new QMenu();
}
if (!m_menu_prompt_tokens)
{
m_menu_prompt_tokens = new QAction(m_tokens_data.prompt_tokens);
}
if (!m_menu_completion_tokens)
{
m_menu_completion_tokens = new QAction(m_tokens_data.completion_tokens);
}
if (!m_menu_total_tokens)
{
m_menu_total_tokens = new QAction(m_tokens_data.total_tokens);
}
if (!m_menu_cache_hit_tokens)
{
m_menu_cache_hit_tokens = new QAction(m_tokens_data.cache_hit_tokens);
}
if (!m_menu_cache_miss_tokens)
{
m_menu_cache_miss_tokens = new QAction(m_tokens_data.cache_miss_tokens);
}
m_msg_tokens_menu->addAction(m_menu_prompt_tokens);
m_msg_tokens_menu->addAction(m_menu_completion_tokens);
m_msg_tokens_menu->addAction(m_menu_cache_hit_tokens);
m_msg_tokens_menu->addAction(m_menu_cache_miss_tokens);
m_msg_tokens_menu->addAction(m_menu_total_tokens);
m_msg_tokens_menu->exec(QCursor::pos());
}
// save按钮实现功能的槽函数
void ctai_history_textedit::on_save_clicked()
{
if (!m_msg_tokens_menu)
{
m_msg_tokens_menu = new QMenu();
}
if (!m_msg_save_text)
{
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"));
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"));
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"));
connect(m_msg_save_pdf, SIGNAL(triggered(bool)), this, SLOT(on_save_pdf()));
}
m_msg_tokens_menu->addAction(m_msg_save_text);
m_msg_tokens_menu->addAction(m_msg_save_html);
m_msg_tokens_menu->addAction(m_msg_save_markdown);
m_msg_tokens_menu->addAction(m_msg_save_pdf);
m_msg_tokens_menu->exec(QCursor::pos());
}
// 实现折叠功能的槽函数
void ctai_history_textedit::on_fold_clicked()
{
m_is_folded = !m_is_folded;
m_msg_history->setFixedHeight(m_is_folded ? 0 : m_original_height);
m_msg_fold->setIcon(QIcon(m_is_folded ? ":res/img/btn/btn_info_down.png" : ":res/img/btn/btn_info_up.png"));
updateGeometry();
}
void ctai_history_textedit::add_message(const model_data &message)
{
QString disp_data;
QString disp_header;
if (message.msg_type_mode == SYSTEM)
{
disp_header = "ID:" + QSL(message.postback_send_id) + " | FP:" + QSL(message.postback_system_fingerprint) + " | 时间:" + QSL(message.postback_time);
m_tokens_data.prompt_tokens = "提示词消耗tokens:" + QSN(message.postback_prompt_tokens);
m_tokens_data.completion_tokens = "生成信息消耗:tokens:" + QSN(message.postback_completion_tokens);
m_tokens_data.total_tokens = "总消耗tokens:" + QSN(message.postback_total_tokens);
m_tokens_data.cache_hit_tokens = "提示词缓存命中消耗tokens:" + QSN(message.postback_prompt_cache_hit_tokens);
m_tokens_data.cache_miss_tokens = "提示词缓存未命中消耗tokens:" + QSN(message.postback_prompt_cache_miss_tokens);
disp_data = QSL(message.postback_model_data);
m_msg_sned_id = QSL(message.postback_send_id);
}
else
{
disp_header = "ID:" + QSL(message.send_user_id) + " | Time:" + QSL(message.send_user_time);
disp_data = QSL(message.send_user_data);
m_msg_sned_id = QSL(message.send_user_id);
}
m_msg_header->setText(disp_header);
m_msg_history->setText(disp_data);
}
void ctai_history_textedit::on_delete_clicked()
{
// 发送删除请求信号
emit delete_requested(m_msg_sned_id);
}
void ctai_history_textedit::on_copy_clicked()
{
// 获取文本并复制到剪贴板
QString text = m_msg_history->toPlainText();
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(text);
}
void ctai_history_textedit::on_save_text()
{
QString fileName = QFileDialog::getSaveFileName(this,
tr("保存消息"), "",
tr("文本文件 (*.txt);;所有文件 (*)"));
if (fileName.isEmpty())
return;
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::warning(this, tr("保存失败"),
tr("无法保存文件 %1:\n%2").arg(fileName).arg(file.errorString()));
return;
}
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()
{
}
void ctai_history_textedit::on_save_markdown()
{
}
void ctai_history_textedit::on_save_pdf()
{
}
void ctai_history_textedit::on_menu_clicked()
{
QMenu menu(this);
// 添加菜单项
QAction *actCopy = menu.addAction(tr("复制"));
QAction *actSave = menu.addAction(tr("保存"));
menu.addSeparator();
QAction *actDelete = menu.addAction(tr("删除"));
// 显示菜单
QPoint pos = m_msg_menu->mapToGlobal(m_msg_menu->rect().bottomRight());
QAction *act = menu.exec(pos);
// 处理菜单选择
if (act == actCopy)
{
on_copy_clicked();
}
else if (act == actSave)
{
on_save_clicked();
}
else if (act == actDelete)
{
on_delete_clicked();
}
}

View File

@ -1,6 +1,6 @@
// ctaitextedit.h
#ifndef CTAI_TEXTEDIT_H
#define CTAI_TEXTEDIT_H
#ifndef CTAI_HISTORY_TEXTEDIT_H
#define CTAI_HISTORY_TEXTEDIT_H
#include <QWidget>
#include <QVBoxLayout>
@ -15,10 +15,9 @@
#include <QApplication>
#include <QClipboard>
#include <QMenu>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextBrowser>
#include <QAbstractTextDocumentLayout>
#include "ctai_base.h"
#include "ctai_parsestring.h"
@ -34,14 +33,13 @@ typedef struct tokens_args{
QString cache_miss_tokens={};
}tokens_data;
class ctai_textedit : public QWidget
class ctai_history_textedit : public QWidget
{
Q_OBJECT
public:
ctai_textedit(msg_type msg_type_mode);
~ctai_textedit();
ctai_history_textedit(msg_type msg_type_mode);
~ctai_history_textedit();
void add_message(const model_data &message);
int get_content_height() const;
private slots:
void on_delete_clicked(); // 删除按钮
void on_copy_clicked(); // 复制按钮
@ -49,9 +47,14 @@ private slots:
void on_menu_clicked(); // 菜单按钮
void on_fold_clicked(); // 折叠按钮
void on_tokens_clicked(); // tokens按钮
void on_save_text(); // 保存文本
void on_save_html(); // 保存html
void on_save_markdown(); // 保存markdown
void on_save_pdf(); // 保存pdf
void on_text_height();
signals:
void delete_requested(); // 请求删除此消息
void delete_requested(QString); // 请求删除此消息
void height_changed(); // 新增高度变化信号
private:
void init_layout(msg_type msg_type_mode);
void connect_signals(msg_type msg_type_mode); // 连接信号和槽
@ -63,24 +66,35 @@ private:
QVBoxLayout *historyLayout={};
QHBoxLayout *header_opts_Layout={};
QPushButton *m_msg_header_ico={};
QLineEdit *m_msg_header={};
QTextEdit *m_msg_history={};
QPushButton *m_msg_del={};
QPushButton *m_msg_copy={};
QPushButton *m_msg_save={};
QPushButton *m_msg_menu={};
QPushButton *m_msg_fold={}; // 折叠按钮
QPushButton *m_msg_tokens={};
QPushButton *m_msg_header_ico={};
QLineEdit *m_msg_header={};
QTextEdit *m_msg_history={};
QPushButton *m_msg_user_del={};
QPushButton *m_msg_system_del={};
QPushButton *m_msg_copy={};
QPushButton *m_msg_save={};
QPushButton *m_msg_menu={};
QPushButton *m_msg_fold={}; // 折叠按钮
QPushButton *m_msg_tokens={};
//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={};
//save保存菜单
QMenu *m_msg_save_menu={};
QAction *m_msg_save_text={};
QAction *m_msg_save_html={};
QAction *m_msg_save_markdown={};
QAction *m_msg_save_pdf={};
bool m_is_folded = false; // 折叠状态
tokens_data m_tokens_data;
QString m_msg_sned_id={};
QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
int m_original_height = 0; // 保存展开时的原始高度
};
#endif // CTAI_TEXTEDIT_H
#endif // ctai_history_textedit_H

162
src/ctai_history_widget.cpp Normal file
View File

@ -0,0 +1,162 @@
#include "ctai_history_widget.h"
ctai_history_widget::ctai_history_widget(QWidget *parent)
: QTableWidget(parent)
{
setup_table();
}
void ctai_history_widget::setup_table()
{
setColumnCount(1);
setShowGrid(false);
verticalHeader()->hide();
horizontalHeader()->hide();
horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 设置自动滚动属性
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
}
ctai_history_widget::~ctai_history_widget()
{
for (auto &pair : message_map_)
{
delete pair.second.first; // 删除model_data
}
clear();
}
void ctai_history_widget::add_message(const model_data &message)
{
QString send_id;
if (message.msg_type_mode == SYSTEM)
{
send_id = QSL(message.postback_send_id);
}
else
{
send_id = QSL(message.send_user_id);
}
auto it = message_map_.find(send_id);
if (it != message_map_.end() && it->second.first->msg_type_mode == SYSTEM)
{
// 更新现有消息
model_data *stored_data = it->second.first;
int row = it->second.second;
if (!QSL(message.postback_model_data).isEmpty() ||
!QSL(message.postback_model_data).contains("[]"))
{
stored_data->postback_model_data += message.postback_model_data;
}
else
{
update_stored_data(stored_data, message);
}
// 更新显示
QWidget *widget = cellWidget(row, 0);
if (auto message_widget = qobject_cast<ctai_history_textedit *>(widget))
{
message_widget->add_message(*stored_data);
}
}
else
{
// 添加新消息
model_data *new_data = new model_data(message);
ctai_history_textedit *message_widget = new ctai_history_textedit(new_data->msg_type_mode);
message_widget->add_message(*new_data);
// 创建新行
int row = rowCount();
insertRow(row);
setCellWidget(row, 0, message_widget);
// 存储到map中
message_map_[send_id] = std::make_pair(new_data, row);
// 连接删除信号
connect(message_widget, SIGNAL(delete_requested(QString)), this, SLOT(on_msg_remove(QString)));
// 连接高度变化信号
connect(message_widget, &ctai_history_textedit::height_changed,
this, &ctai_history_widget::on_widget_height_changed);
// 滚动到新消息
scrollToItem(item(row, 0));
}
// 立即滚动到底部
scrollToBottom();
}
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) {
resizeRowToContents(row);
}
// 恢复滚动条位置
if (was_at_bottom) {
scrollToBottom();
}
// 重新启用更新
setUpdatesEnabled(true);
}
void ctai_history_widget::on_msg_remove(QString send_id)
{
int row = this->rowCount();
if (row >= 0)
{
// 从map中删除
qDebug() << "remove_row:" << row;
auto it = message_map_.find(send_id);
if (it != message_map_.end())
{
qDebug() << "remove it:" << it->second.first;
delete it->second.first; // 删除model_data
message_map_.erase(it);
}
qDebug() << "current_row:" << this->currentRow();
// 移除并删除该项
removeRow(this->currentRow());
}
}
ctai_history_textedit *ctai_history_widget::current_message() const
{
int current_row = currentRow();
if (current_row >= 0)
{
return qobject_cast<ctai_history_textedit *>(cellWidget(current_row, 0));
}
return nullptr;
}
void ctai_history_widget::update_stored_data(model_data *stored_data, const model_data &message)
{
stored_data->api_key = message.api_key;
stored_data->api_url = message.api_url;
stored_data->postback_completion_tokens = message.postback_completion_tokens;
stored_data->postback_finish_reason = message.postback_finish_reason;
stored_data->postback_prompt_cache_hit_tokens = message.postback_prompt_cache_hit_tokens;
stored_data->postback_prompt_cache_miss_tokens = message.postback_prompt_cache_miss_tokens;
stored_data->postback_prompt_tokens = message.postback_prompt_tokens;
stored_data->postback_send_id = message.postback_send_id;
stored_data->postback_server_model = message.postback_server_model;
stored_data->postback_stream_mode = message.postback_stream_mode;
stored_data->postback_system_fingerprint = message.postback_system_fingerprint;
stored_data->postback_time = message.postback_time;
stored_data->postback_total_tokens = message.postback_total_tokens;
stored_data->request_body = message.request_body;
stored_data->send_accept_header = message.send_accept_header;
stored_data->send_content_header = message.send_content_header;
stored_data->send_user_data = message.send_user_data;
stored_data->user_model = message.user_model;
// postback_model_data 不在这里赋值
}

29
src/ctai_history_widget.h Normal file
View File

@ -0,0 +1,29 @@
#ifndef CTAI_HISTORY_WIDGET_H
#define CTAI_HISTORY_WIDGET_H
#include <QTableWidget>
#include <QScrollBar>
#include <QHeaderView>
#include <map>
#include "ctai_history_textedit.h"
class ctai_history_widget : public QTableWidget
{
Q_OBJECT
public:
ctai_history_widget(QWidget *parent = nullptr);
~ctai_history_widget();
void add_message(const model_data &message);
ctai_history_textedit *current_message() const;
private:
std::map<QString, std::pair<model_data*, int>> message_map_; // int存储行号
QString last_send_id_;
void setup_table();
void update_stored_data(model_data* stored_data, const model_data& message);
private slots:
void on_msg_remove(QString send_id);
void on_widget_height_changed(); // 新增槽函数处理高度变化
};
#endif

View File

@ -1,187 +0,0 @@
#include "ctai_msg_table.h"
ctai_msg_table::ctai_msg_table(QWidget *parent)
: QListWidget(parent)
{
setSpacing(1);
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 禁用水平滚动条
}
ctai_msg_table::~ctai_msg_table()
{
for (auto &pair : message_map_)
{
delete pair.second.first; // 删除model_data
}
clear(); // 清理QListWidget的内容
}
void ctai_msg_table::add_message(const model_data &message)
{
QString send_id;
if(message.msg_type_mode==SYSTEM)
{
send_id= QSL(message.postback_send_id);
}else{
send_id= QSL(message.send_user_id);
}
// 检查是否存在相同send_id的消息
auto it = message_map_.find(send_id);
if (it != message_map_.end()&& it->second.first->msg_type_mode==SYSTEM)
{
// 存在相同send_id追加内容
model_data *stored_data = it->second.first;
QListWidgetItem *stored_item = it->second.second;
// 更新存储的数据
if (!QSL(message.postback_model_data).isEmpty()||!QSL(message.postback_model_data).contains("[]"))
{
stored_data->postback_model_data += message.postback_model_data;
}else{
update_stored_data(stored_data, message);
}
// 更新显示
ctai_textedit *message_widget = qobject_cast<ctai_textedit *>(itemWidget(stored_item));
if (message_widget)
{
message_widget->add_message(*stored_data);
}
}
else
{
// 新消息
model_data *new_data = new model_data(message);
// 创建新的消息显示widget
ctai_textedit *message_widget = new ctai_textedit(new_data->msg_type_mode);
message_widget->add_message(*new_data);
// 创建并添加到列表
QListWidgetItem *item = create_message_item(message_widget);
addItem(item);
setItemWidget(item, message_widget);
// 存储到map中
message_map_[send_id] = std::make_pair(new_data, item);
// 连接删除信号
connect(message_widget, &ctai_textedit::delete_requested,
[this, item, send_id]()
{
int row = this->row(item);
if (row >= 0)
{
// 从map中删除
auto it = message_map_.find(send_id);
if (it != message_map_.end())
{
delete it->second.first; // 删除model_data
message_map_.erase(it);
}
// 移除并删除该项
QListWidgetItem *removed_item = takeItem(row);
delete removed_item;
}
});
update_items_width();
// 自动滚动到最新消息
scrollToItem(item);
}
last_send_id_ = send_id;
}
QListWidgetItem *ctai_msg_table::create_message_item(ctai_textedit *message_widget)
{
QListWidgetItem *item = new QListWidgetItem();
// 设置初始大小,宽度使用视口宽度
int width = viewport()->width();
if (verticalScrollBar() && verticalScrollBar()->isVisible())
{
width -= verticalScrollBar()->width();
}
message_widget->setFixedWidth(width);
item->setSizeHint(QSize(width, 200));
return item;
}
ctai_textedit *ctai_msg_table::current_message() const
{
QListWidgetItem *current_item = currentItem();
if (current_item)
{
return qobject_cast<ctai_textedit *>(itemWidget(current_item));
}
return nullptr;
}
void ctai_msg_table::resizeEvent(QResizeEvent *event)
{
QListWidget::resizeEvent(event);
update_items_width();
}
void ctai_msg_table::showEvent(QShowEvent *event)
{
QListWidget::showEvent(event);
update_items_width();
}
void ctai_msg_table::update_items_width()
{
// 获取视口宽度
int viewport_width = viewport()->width();
// 考虑边距和滚动条
if (verticalScrollBar() && verticalScrollBar()->isVisible())
{
viewport_width -= verticalScrollBar()->width();
}
// 减去左右边距
viewport_width -= 2; // 或者根据实际边距调整
// 更新所有项的宽度
for (int i = 0; i < count(); ++i)
{
QListWidgetItem *item = this->item(i);
if (item)
{
ctai_textedit *widget = qobject_cast<ctai_textedit *>(itemWidget(item));
if (widget)
{
widget->setFixedWidth(viewport_width);
// 确保 item 的大小提示与 widget 宽度一致
item->setSizeHint(QSize(viewport_width, item->sizeHint().height()));
}
}
}
}
void ctai_msg_table::update_stored_data(model_data* stored_data, const model_data& message)
{
stored_data->api_key = message.api_key;
stored_data->api_url = message.api_url;
stored_data->postback_completion_tokens = message.postback_completion_tokens;
stored_data->postback_finish_reason = message.postback_finish_reason;
stored_data->postback_prompt_cache_hit_tokens = message.postback_prompt_cache_hit_tokens;
stored_data->postback_prompt_cache_miss_tokens = message.postback_prompt_cache_miss_tokens;
stored_data->postback_prompt_tokens = message.postback_prompt_tokens;
stored_data->postback_send_id = message.postback_send_id;
stored_data->postback_server_model = message.postback_server_model;
stored_data->postback_stream_mode = message.postback_stream_mode;
stored_data->postback_system_fingerprint = message.postback_system_fingerprint;
stored_data->postback_time = message.postback_time;
stored_data->postback_total_tokens = message.postback_total_tokens;
stored_data->request_body = message.request_body;
stored_data->send_accept_header = message.send_accept_header;
stored_data->send_content_header = message.send_content_header;
stored_data->send_user_data = message.send_user_data;
stored_data->user_model = message.user_model;
// postback_model_data 不在这里赋值
}

View File

@ -1,33 +0,0 @@
#ifndef CTAI_MSG_TABLE_H
#define CTAI_MSG_TABLE_H
#include <QListWidget>
#include <QScrollBar>
#include <map>
#include "ctai_textedit.h"
class ctai_msg_table : public QListWidget
{
Q_OBJECT
public:
ctai_msg_table(QWidget *parent = nullptr);
~ctai_msg_table();
// 添加一条新消息
void add_message(const model_data &message);
// 获取当前选中的消息widget
ctai_textedit *current_message() const;
protected:
void resizeEvent(QResizeEvent *event) override;
void showEvent(QShowEvent *event) override;
private:
// 存储消息的map
std::map<QString, std::pair<model_data*, QListWidgetItem*>> message_map_;
QString last_send_id_; // 存储上一次的send_id
// 创建新的消息项
QListWidgetItem *create_message_item(ctai_textedit *message_widget);
void update_stored_data(model_data* stored_data, const model_data& message);
void update_items_width();
};
#endif

View File

@ -40,7 +40,7 @@ void ctai_session_info::init_sub_layout()
height: 0px;
}
)");
m_session_systeam_info = new ctai_msg_table();
m_session_systeam_info = new ctai_history_widget();
m_session_systeam_info_layout = new QVBoxLayout();
m_session_systeam_info_layout->addWidget(m_session_systeam_info);
m_session_systeam_info_layout->setContentsMargins(0, 0, 0, 0);

View File

@ -12,7 +12,7 @@
#include <QFile>
#include "ctai_switch_control.h"
#include "ctai_curl.h"
#include "ctai_msg_table.h"
#include "ctai_history_widget.h"
class ctai_session_info : public QWidget
{
Q_OBJECT
@ -34,7 +34,7 @@ private:
//信息输出窗口布局
QListWidget *m_list_widget;
ctai_msg_table *m_session_systeam_info;
ctai_history_widget *m_session_systeam_info;
QVBoxLayout *m_session_systeam_info_layout;
//用户询问信息布局
QTextEdit *m_session_user_edit_info;

View File

@ -1,244 +0,0 @@
#include "ctai_textedit.h"
ctai_textedit::ctai_textedit(msg_type msg_type_mode)
{
init_layout(msg_type_mode);
}
ctai_textedit::~ctai_textedit()
{
}
void ctai_textedit::init_layout(msg_type msg_type_mode)
{
// 主垂直布局
mainLayout = new QVBoxLayout();
// 1. 消息头垂直
headerLayout = new QVBoxLayout();
// 消息头水平
header_info_Layout = new QHBoxLayout();
m_msg_header_ico = new QPushButton();
m_msg_header_ico->setObjectName("m_msg_header_ico");
m_msg_header = new QLineEdit();
m_msg_header->setObjectName("m_msg_header");
m_msg_header->setReadOnly(true);
header_info_Layout->addWidget(m_msg_header_ico);
header_info_Layout->addWidget(m_msg_header);
header_info_Layout->setContentsMargins(5, 0,5, 0);
headerLayout->addLayout(header_info_Layout);
if (msg_type_mode == SYSTEM)
{
// 2.tokens功能按钮
m_msg_tokens=new QPushButton(QIcon(":res/img/btn/btn_info_tokens.png"),NULL);
m_msg_tokens->setObjectName("m_msg_tokens");
header_info_Layout->addWidget(m_msg_tokens);
// 3.消息功能区
header_opts_Layout = new QHBoxLayout();
m_msg_del = new QPushButton();
m_msg_copy = new QPushButton();
m_msg_save = new QPushButton();
m_msg_menu = new QPushButton();
m_msg_fold = new QPushButton();
m_msg_del->setObjectName("m_msg_del");
m_msg_copy->setObjectName("m_msg_copy");
m_msg_save->setObjectName("m_msg_save");
m_msg_menu->setObjectName("m_msg_menu");
m_msg_fold->setObjectName("m_msg_fold");
m_msg_fold->setIcon(QIcon(":res/img/btn/btn_info_up.png"));
header_opts_Layout->addItem(sparcer_item);
header_opts_Layout->addWidget(m_msg_del);
header_opts_Layout->addWidget(m_msg_copy);
header_opts_Layout->addWidget(m_msg_save);
header_opts_Layout->addWidget(m_msg_menu);
header_opts_Layout->addWidget(m_msg_fold);
header_opts_Layout->addItem(sparcer_item);
header_opts_Layout->setContentsMargins(5, 0, 5, 0);
headerLayout->addLayout(header_opts_Layout);
}else{
m_msg_del = new QPushButton();
m_msg_del->setObjectName("m_msg_del");
header_info_Layout->addWidget(m_msg_del);
}
// 4. 历史信息QTextEdit
historyLayout = new QVBoxLayout();
m_msg_history = new QTextEdit();
//m_msg_history->setOpenExternalLinks(true); // 允许打开外部链接
//m_msg_history->setOpenLinks(true); // 允许打开链接
m_msg_history->setObjectName("m_msg_history");
m_msg_history->setReadOnly(true);
m_msg_history->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_msg_history->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_msg_history->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_msg_history->setFrameStyle(QFrame::NoFrame);
historyLayout->addWidget(m_msg_history);
historyLayout->addItem(bottom_spacer);
historyLayout->setContentsMargins(5, 0, 5, 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->setStretch(0, 1);
mainLayout->setSpacing(1);
mainLayout->setContentsMargins(5, 0, 5, 0);
setLayout(mainLayout);
connect_signals(msg_type_mode);
}
void ctai_textedit::connect_signals(msg_type msg_type_mode)
{
if(msg_type_mode==SYSTEM){
connect(m_msg_del, &QPushButton::clicked, this, &ctai_textedit::on_delete_clicked);
connect(m_msg_copy, &QPushButton::clicked, this, &ctai_textedit::on_copy_clicked);
connect(m_msg_save, &QPushButton::clicked, this, &ctai_textedit::on_save_clicked);
connect(m_msg_menu, &QPushButton::clicked, this, &ctai_textedit::on_menu_clicked);
connect(m_msg_fold, &QPushButton::clicked, this, &ctai_textedit::on_fold_clicked);
connect(m_msg_tokens, &QPushButton::clicked, this, &ctai_textedit::on_tokens_clicked);
}else{
connect(m_msg_del, &QPushButton::clicked, this, &ctai_textedit::on_delete_clicked);
}
}
//tokens按钮实现功能的槽函数
void ctai_textedit::on_tokens_clicked()
{
if(!m_msg_tokens_menu)
{
m_msg_tokens_menu = new QMenu();
}
if(!m_menu_prompt_tokens)
{
m_menu_prompt_tokens = new QAction(m_tokens_data.prompt_tokens);
}
if(!m_menu_completion_tokens)
{
m_menu_completion_tokens = new QAction(m_tokens_data.completion_tokens);
}
if(!m_menu_total_tokens)
{
m_menu_total_tokens = new QAction(m_tokens_data.total_tokens);
}
if(!m_menu_cache_hit_tokens)
{
m_menu_cache_hit_tokens = new QAction(m_tokens_data.cache_hit_tokens);
}
if(!m_menu_cache_miss_tokens)
{
m_menu_cache_miss_tokens = new QAction(m_tokens_data.cache_miss_tokens);
}
m_msg_tokens_menu->addAction(m_menu_prompt_tokens);
m_msg_tokens_menu->addAction(m_menu_completion_tokens);
m_msg_tokens_menu->addAction(m_menu_cache_hit_tokens);
m_msg_tokens_menu->addAction(m_menu_cache_miss_tokens);
m_msg_tokens_menu->addAction(m_menu_total_tokens);
m_msg_tokens_menu->exec(QCursor::pos());
}
// 实现折叠功能的槽函数
void ctai_textedit::on_fold_clicked()
{
m_is_folded = !m_is_folded;
if (m_is_folded)
{
m_msg_history->setMaximumHeight(0);
}
else
{
m_msg_history->setMaximumHeight(QWIDGETSIZE_MAX);
}
// 更新按钮图标
m_msg_fold->setIcon(QIcon(m_is_folded ? ":res/img/btn/btn_info_up.png" : ":res/img/btn/btn_info_down.png"));
}
void ctai_textedit::add_message(const model_data &message)
{
QString disp_data;
QString disp_header;
if (message.msg_type_mode == SYSTEM)
{
disp_header = "ID:" + QSL(message.postback_send_id) + " | FP:" + QSL(message.postback_system_fingerprint) + " | 时间:" + QSL(message.postback_time);
m_tokens_data.prompt_tokens="提示词消耗tokens:" + QSN(message.postback_prompt_tokens);
m_tokens_data.completion_tokens="生成信息消耗:tokens:" + QSN(message.postback_completion_tokens);
m_tokens_data.total_tokens="总消耗tokens:" + QSN(message.postback_total_tokens);
m_tokens_data.cache_hit_tokens="提示词缓存命中消耗tokens:" + QSN(message.postback_prompt_cache_hit_tokens);
m_tokens_data.cache_miss_tokens="提示词缓存未命中消耗tokens:" + QSN(message.postback_prompt_cache_miss_tokens);
disp_data = QSL(message.postback_model_data);
}
else
{
disp_header = "ID:" + QSL(message.send_user_id) + " | Time:" + QSL(message.send_user_time);
disp_data = QSL(message.send_user_data);
}
m_msg_header->setText(disp_header);
m_msg_history->setHtml(disp_data);
}
void ctai_textedit::on_delete_clicked()
{
// 发送删除请求信号
emit delete_requested();
}
void ctai_textedit::on_copy_clicked()
{
// 获取文本并复制到剪贴板
QString text = m_msg_history->toPlainText();
QClipboard *clipboard = QApplication::clipboard();
clipboard->setText(text);
}
void ctai_textedit::on_save_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,
tr("保存消息"), "",
tr("文本文件 (*.txt);;所有文件 (*)"));
if (fileName.isEmpty())
return;
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::warning(this, tr("保存失败"),
tr("无法保存文件 %1:\n%2").arg(fileName).arg(file.errorString()));
return;
}
QTextStream out(&file);
out << m_msg_header->text() << "\n\n";
out << m_msg_history->toPlainText() << "\n\n";
out << m_msg_tokens->text();
}
void ctai_textedit::on_menu_clicked()
{
QMenu menu(this);
// 添加菜单项
QAction *actCopy = menu.addAction(tr("复制"));
QAction *actSave = menu.addAction(tr("保存"));
menu.addSeparator();
QAction *actDelete = menu.addAction(tr("删除"));
// 显示菜单
QPoint pos = m_msg_menu->mapToGlobal(m_msg_menu->rect().bottomRight());
QAction *act = menu.exec(pos);
// 处理菜单选择
if (act == actCopy)
{
on_copy_clicked();
}
else if (act == actSave)
{
on_save_clicked();
}
else if (act == actDelete)
{
on_delete_clicked();
}
}