修复了sui界面鼠标乱蹦的问题

This commit is contained in:
JackLee 2025-02-28 20:00:28 +08:00
parent 692eade472
commit 97e7610b0c
27 changed files with 4256 additions and 3615 deletions

View File

@ -88,7 +88,8 @@
"qhboxlayout": "cpp",
"qlineedit": "cpp",
"qcombobox": "cpp",
"qlistwidget": "cpp"
"qlistwidget": "cpp",
"qgroupbox": "cpp"
},
"editor.gotoLocation.alternativeDeclarationCommand": "editor.action.revealDefinition",
"editor.gotoLocation.alternativeDefinitionCommand": "editor.action.revealDefinition",

Binary file not shown.

View File

@ -1,33 +1,66 @@
# ninja log v6
4424 9535 7624404759365303 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj e15b530df9d9d77c
17 285 7624406103518392 ctai_autogen/timestamp da3870ebc94b983e
4426 15149 7624404759382694 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 53e501d667fcd97a
3795 12892 7624444439329392 CMakeFiles/ctai.dir/src/ctai.cpp.obj 94cd69a700aed52c
7101 13419 7624392729187697 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 73976d0d057b09cb
272 3225 7624406980913454 CMakeFiles/ctai.dir/qrc_res.cpp.obj a369fd70be247e68
3799 12360 7624444439364178 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj f5aadec87761fa2
14853 15670 7624392806712393 CMakeFiles/ctai.dir/sui.rc.obj 222e0b180d90e3cd
499 3769 7624406108332925 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 97631ab5de89dd57
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
17 271 7624406980833829 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
13419 18692 7624392792374462 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 60b8b6c16c71de62
3797 12394 7624444439346784 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 4e60e53557e3d9df
18 251 7624446224390892 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
3802 12972 7624444439381569 CMakeFiles/ctai.dir/src/main.cpp.obj 413b9816064f9d57
13484 29551 7624392793022469 CMakeFiles/ctai.dir/src/sui_title.cpp.obj f63cb863fd4bb908
13415 33956 7624392792339446 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 419a299317dee38c
3760 8387 7624417178319931 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj e15b530df9d9d77c
18 251 7624446224390892 ctai_autogen/timestamp da3870ebc94b983e
7084 36108 7624392729024371 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 6249f33e823d8399
17 285 7624406103518392 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 251 7624446224390892 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
3769 15558 7624406141021337 F:/SourceCode/ctai/release/ctai.exe 5bbcc239c00bb3a9
17 285 7624406103518392 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
10077 21316 7624446323660465 F:/SourceCode/ctai/release/ctai.exe 8d3efc8221468516
18 251 7624446224390892 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
13031 29305 7624392788487480 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
286 498 7624406108211182 qrc_res.cpp 9794859fafc6825
4420 16045 7624404759315326 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 9024cb90a9e8c9bc
17 271 7624406980833829 qrc_res.cpp 9794859fafc6825
252 10076 7624446225430082 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 9024cb90a9e8c9bc
7103 13415 7624392729205083 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj ca09550e1ecd0
7081 13948 7624392728989606 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj f4713b73c1c6e0d5
7089 11741 7624392729079367 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj ee65172c0996dd64
13415 33956 7624392792339446 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 419a299317dee38c
13484 29551 7624392793022469 CMakeFiles/ctai.dir/src/sui_title.cpp.obj f63cb863fd4bb908
4435 15352 7624404759462490 CMakeFiles/ctai.dir/src/main.cpp.obj 413b9816064f9d57
17 285 7624406103518392 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
4428 14292 7624404759400089 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 4e60e53557e3d9df
13419 18692 7624392792374462 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 60b8b6c16c71de62
286 498 7624406108211182 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
499 3769 7624406108332925 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 97631ab5de89dd57
14853 15670 7624392806712393 CMakeFiles/ctai.dir/sui.rc.obj 222e0b180d90e3cd
4430 14320 7624404759427528 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj f5aadec87761fa2
501 3197 7624406108350329 CMakeFiles/ctai.dir/qrc_res.cpp.obj a369fd70be247e68
7101 13419 7624392729187697 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 73976d0d057b09cb
4422 15061 7624404759347914 CMakeFiles/ctai.dir/src/ctai.cpp.obj 94cd69a700aed52c
4426 15149 7624404759382694 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 53e501d667fcd97a
17 271 7624406980833829 qrc_res.cpp 9794859fafc6825
17 271 7624406980833829 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
272 3225 7624406980913454 CMakeFiles/ctai.dir/qrc_res.cpp.obj a369fd70be247e68
3225 15258 7624407010444222 F:/SourceCode/ctai/release/ctai.exe 5bbcc239c00bb3a9
18 4510 7624458479781839 ctai_autogen/timestamp da3870ebc94b983e
18 4510 7624458479781839 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 4510 7624458479781839 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 4510 7624458479781839 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4517 8327 7624458480990866 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 3e9afd6da0c01049
4520 14573 7624458481032281 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj f5aadec87761fa2
4518 14733 7624458481005910 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 4e60e53557e3d9df
4515 15124 7624458480973475 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 53e501d667fcd97a
4512 15171 7624458480938690 CMakeFiles/ctai.dir/src/ctai.cpp.obj 94cd69a700aed52c
4523 15241 7624458481051288 CMakeFiles/ctai.dir/src/main.cpp.obj 413b9816064f9d57
4510 16194 7624458480921292 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 9024cb90a9e8c9bc
16194 27120 7624458597753646 F:/SourceCode/ctai/release/ctai.exe fb71333a7cdf2df2
18 274 7624466975620911 ctai_autogen/timestamp da3870ebc94b983e
18 274 7624466975620911 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 274 7624466975620911 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 274 7624466975620911 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
277 7601 7624466978217787 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
275 8182 7624466978197541 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 4e60e53557e3d9df
8183 19261 7624467057270216 F:/SourceCode/ctai/release/ctai.exe fb71333a7cdf2df2
17 264 7624468715656948 ctai_autogen/timestamp da3870ebc94b983e
17 264 7624468715656948 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 264 7624468715656948 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
17 264 7624468715656948 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
265 7323 7624468718137056 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
7323 19303 7624468788724267 F:/SourceCode/ctai/release/ctai.exe fb71333a7cdf2df2
28 305 7624471203971984 ctai_autogen/timestamp da3870ebc94b983e
28 305 7624471203971984 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
28 305 7624471203971984 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
28 305 7624471203971984 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
306 8176 7624471206745267 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
8176 20847 7624471285438645 F:/SourceCode/ctai/release/ctai.exe fb71333a7cdf2df2
18 277 7624471814153922 ctai_autogen/timestamp da3870ebc94b983e
18 277 7624471814153922 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 277 7624471814153922 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 277 7624471814153922 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
278 7410 7624471816744530 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
7410 17892 7624471888073039 F:/SourceCode/ctai/release/ctai.exe fb71333a7cdf2df2

View File

@ -448,12 +448,6 @@
"UVLADIE3JM/moc_ctai_parsestring.cpp",
null
],
[
"F:/SourceCode/ctai/src/ctai_session_docker.h",
"MU",
"UVLADIE3JM/moc_ctai_session_docker.cpp",
null
],
[
"F:/SourceCode/ctai/src/ctai_session_info.h",
"MU",
@ -461,9 +455,9 @@
null
],
[
"F:/SourceCode/ctai/src/ctai_session_table.h",
"F:/SourceCode/ctai/src/ctai_session_setting.h",
"MU",
"UVLADIE3JM/moc_ctai_session_table.cpp",
"UVLADIE3JM/moc_ctai_session_setting.cpp",
null
],
[
@ -611,9 +605,8 @@
[ "F:/SourceCode/ctai/src/ctai_curl.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_msg_table.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_parsestring.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_docker.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_info.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_table.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_setting.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_session_widget.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_switch_control.cpp", "MU", null ],
[ "F:/SourceCode/ctai/src/ctai_tabbar.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

@ -44,6 +44,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/QStringList \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QThread \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QTimer \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QUuid \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QVariant \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCore \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCoreDepends \
@ -453,6 +454,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFrame \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QGroupBox \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHeaderView \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QInputDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLabel \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLineEdit \
@ -495,6 +497,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qframe.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgridlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgroupbox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qheaderview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qinputdialog.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlabel.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayout.h \
@ -1073,7 +1076,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.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 \

View File

@ -36,7 +36,15 @@ namespace {
#ifdef QT_MOC_HAS_STRINGDATA
struct qt_meta_stringdata_CLASSctai_session_widgetENDCLASS_t {};
constexpr auto qt_meta_stringdata_CLASSctai_session_widgetENDCLASS = QtMocHelpers::stringData(
"ctai_session_widget"
"ctai_session_widget",
"on_new_chat_clicked",
"",
"on_set_chat_clicked",
"on_del_chat_clicked",
"connect_signals",
"on_session_name_changed",
"QTableWidgetItem*",
"item"
);
#else // !QT_MOC_HAS_STRINGDATA
#error "qtmochelpers.h not found or too old."
@ -49,13 +57,27 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSctai_session_widgetENDCLASS[] =
12, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
5, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags, initial metatype offsets
1, 0, 44, 2, 0x0a, 1 /* Public */,
3, 0, 45, 2, 0x0a, 2 /* Public */,
4, 0, 46, 2, 0x0a, 3 /* Public */,
5, 0, 47, 2, 0x0a, 4 /* Public */,
6, 1, 48, 2, 0x08, 5 /* Private */,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, 0x80000000 | 7, 8,
0 // eod
};
@ -67,17 +89,36 @@ Q_CONSTINIT const QMetaObject ctai_session_widget::staticMetaObject = { {
nullptr,
qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSctai_session_widgetENDCLASS_t,
// Q_OBJECT / Q_GADGET
QtPrivate::TypeAndForceComplete<ctai_session_widget, std::true_type>
QtPrivate::TypeAndForceComplete<ctai_session_widget, std::true_type>,
// method 'on_new_chat_clicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'on_set_chat_clicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'on_del_chat_clicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'connect_signals'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'on_session_name_changed'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<QTableWidgetItem *, std::false_type>
>,
nullptr
} };
void ctai_session_widget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<ctai_session_widget *>(_o);
(void)_t;
switch (_id) {
case 0: _t->on_new_chat_clicked(); break;
case 1: _t->on_set_chat_clicked(); break;
case 2: _t->on_del_chat_clicked(); break;
case 3: _t->connect_signals(); break;
case 4: _t->on_session_name_changed((*reinterpret_cast< std::add_pointer_t<QTableWidgetItem*>>(_a[1]))); break;
default: ;
}
}
}
const QMetaObject *ctai_session_widget::metaObject() const
@ -96,6 +137,17 @@ void *ctai_session_widget::qt_metacast(const char *_clname)
int ctai_session_widget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 5)
qt_static_metacall(this, _c, _id, _a);
_id -= 5;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 5)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 5;
}
return _id;
}
QT_WARNING_POP

View File

@ -36,6 +36,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QString \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QStringList \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QTimer \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QUuid \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QVariant \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCore \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCoreDepends \
@ -359,6 +360,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFileDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QGroupBox \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHeaderView \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLabel \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLineEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QListWidget \
@ -387,6 +389,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qframe.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgridlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgroupbox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qheaderview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlabel.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayoutitem.h \
@ -946,7 +949,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.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 \

View File

@ -37,6 +37,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/QString \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QStringList \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QTimer \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QUuid \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QVariant \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCore \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCoreDepends \
@ -366,6 +367,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFileDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QGroupBox \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHeaderView \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLabel \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLineEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QListWidget \
@ -400,6 +402,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qframe.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgridlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgroupbox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qheaderview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlabel.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayoutitem.h \
@ -962,7 +965,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.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 \

View File

@ -43,6 +43,7 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QStringList \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QThread \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QTimer \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QUuid \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QVariant \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCore \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QtCoreDepends \
@ -312,7 +313,6 @@ ctai_autogen/timestamp: \
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 \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QCloseEvent \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QContextMenuEvent \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QDesktopServices \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtGui/QFontDatabase \
@ -448,12 +448,12 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QApplication \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QComboBox \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QDockWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFileDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFileIconProvider \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QFrame \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QGroupBox \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QHeaderView \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QInputDialog \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLabel \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QLineEdit \
@ -491,12 +491,12 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qcombobox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qdialog.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qdialogbuttonbox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qdockwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qfiledialog.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qfileiconprovider.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qframe.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgridlayout.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qgroupbox.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qheaderview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qinputdialog.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlabel.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qlayout.h \
@ -1393,12 +1393,10 @@ ctai_autogen/timestamp: \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.cpp \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_docker.cpp \
F:/SourceCode/ctai/src/ctai_session_docker.h \
F:/SourceCode/ctai/src/ctai_session_info.cpp \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.cpp \
F:/SourceCode/ctai/src/ctai_session_table.h \
F:/SourceCode/ctai/src/ctai_session_setting.cpp \
F:/SourceCode/ctai/src/ctai_session_setting.h \
F:/SourceCode/ctai/src/ctai_session_widget.cpp \
F:/SourceCode/ctai/src/ctai_session_widget.h \
F:/SourceCode/ctai/src/ctai_switch_control.cpp \

View File

@ -3,9 +3,8 @@
#include "UVLADIE3JM/moc_ctai_cmd.cpp"
#include "UVLADIE3JM/moc_ctai_curl.cpp"
#include "UVLADIE3JM/moc_ctai_msg_table.cpp"
#include "UVLADIE3JM/moc_ctai_session_docker.cpp"
#include "UVLADIE3JM/moc_ctai_session_info.cpp"
#include "UVLADIE3JM/moc_ctai_session_table.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"

Binary file not shown.

View File

@ -1,42 +0,0 @@
#include "ctai_session_docker.h"
ctai_session_docker::ctai_session_docker(QWidget *parent) : QDockWidget(parent)
{
/*隐藏标题栏
QWidget *oldTitalbar = this->titleBarWidget();
QWidget *newTitalbar = new QWidget();
this->setTitleBarWidget(newTitalbar);
delete oldTitalbar;
*/
}
bool ctai_session_docker::event(QEvent *event)
{
if(event->type() == QEvent::ZOrderChange)
{
if(isFloating()) //判断是否变为浮动窗口
{
/*
if(this->windowTitle()==tr("播放器")){
this->showFullScreen();
this->setWindowState(Qt::WindowFullScreen);
this->move(0, 0);
}
*/
//this->resize(600,400); //改变初始化大小
this->show();
}
}
return QDockWidget::event(event);
}
void ctai_session_docker::closeEvent(QCloseEvent* event)
{
if(isFloating())
{
this->setFloating(false);
QEvent* e = new QEvent(QEvent::ZOrderChange);
QApplication::sendEvent(this,e);
event->ignore();
}
return QDockWidget::closeEvent(event);
}

View File

@ -1,18 +0,0 @@
#ifndef CTAI_SESSION_DOCKER_H
#define CTAI_SESSION_DOCKER_H
#include <QDockWidget>
#include <QEvent>
#include <QApplication>
#include <QCloseEvent>
class ctai_session_docker:public QDockWidget
{
Q_OBJECT
public:
explicit ctai_session_docker(QWidget *parent = nullptr);
bool event(QEvent *event) override;
void closeEvent(QCloseEvent* event) override;
};
#endif // CTAI_SESSION_DOCKER_H

View File

@ -46,6 +46,7 @@ private:
ctai_switch_control *m_stream_switch;
QHBoxLayout *m_session_user_btn_layout;
QVBoxLayout *m_session_user_group_layout;
//按钮信息
QStringList m_user_btn_list = {"btn_user_new_chat",

View File

@ -0,0 +1,63 @@
#include "ctai_session_setting.h"
ctai_session_setting::ctai_session_setting(QWidget *parent)
: QWidget(parent)
{
initUI();
setupConnections();
}
ctai_session_setting::~ctai_session_setting()
{
}
void ctai_session_setting::initUI()
{
mainLayout = new QVBoxLayout(this);
mainLayout->setSpacing(10);
mainLayout->setContentsMargins(10, 10, 10, 10);
// 创建标签和输入框
labelModelName = new QLabel("Model Name:", this);
labelFreqPenalty = new QLabel("Frequency Penalty:", this);
labelMaxTokens = new QLabel("Max Tokens:", this);
labelPresencePenalty = new QLabel("Presence Penalty:", this);
labelTemperature = new QLabel("Temperature:", this);
labelTopP = new QLabel("Top P:", this);
editModelName = new QTextEdit(this);
editFreqPenalty = new QTextEdit(this);
editMaxTokens = new QTextEdit(this);
editPresencePenalty = new QTextEdit(this);
editTemperature = new QTextEdit(this);
editTopP = new QTextEdit(this);
// 设置输入框的固定高度
QList<QTextEdit*> textEdits = {editModelName, editFreqPenalty, editMaxTokens,
editPresencePenalty, editTemperature, editTopP};
for(auto edit : textEdits) {
edit->setFixedHeight(30);
}
// 创建水平布局并添加到主布局
QList<QPair<QLabel*, QTextEdit*>> rows = {
{labelModelName, editModelName},
{labelFreqPenalty, editFreqPenalty},
{labelMaxTokens, editMaxTokens},
{labelPresencePenalty, editPresencePenalty},
{labelTemperature, editTemperature},
{labelTopP, editTopP}
};
for(const auto& row : rows) {
QHBoxLayout* hLayout = new QHBoxLayout();
hLayout->addWidget(row.first);
hLayout->addWidget(row.second);
mainLayout->addLayout(hLayout);
}
}
void ctai_session_setting::setupConnections()
{
// 在这里添加信号和槽的连接
}

View File

@ -0,0 +1,41 @@
#ifndef CTAI_SESSION_SETTING_H
#define CTAI_SESSION_SETTING_H
#include <QWidget>
#include <QLabel>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
class ctai_session_setting : public QWidget
{
Q_OBJECT
public:
explicit ctai_session_setting(QWidget *parent = nullptr);
~ctai_session_setting();
private:
// 布局
QVBoxLayout* mainLayout;
// 标签
QLabel* labelModelName;
QLabel* labelFreqPenalty;
QLabel* labelMaxTokens;
QLabel* labelPresencePenalty;
QLabel* labelTemperature;
QLabel* labelTopP;
// 输入框
QTextEdit* editModelName;
QTextEdit* editFreqPenalty;
QTextEdit* editMaxTokens;
QTextEdit* editPresencePenalty;
QTextEdit* editTemperature;
QTextEdit* editTopP;
private:
void initUI();
void setupConnections();
};
#endif

View File

@ -1,9 +0,0 @@
#include "ctai_session_table.h"
ctai_session_table::ctai_session_table()
{
}
ctai_session_table::~ctai_session_table()
{
}

View File

@ -1,12 +0,0 @@
#ifndef CTAI_SESSION_TABLE_H
#define CTAI_SESSION_TABLE_H
#include <QTableWidget>
class ctai_session_table : public QTableWidget
{
Q_OBJECT
public:
ctai_session_table();
~ctai_session_table();
};
#endif // CTAI_SESSION_TABLE_H

View File

@ -3,55 +3,75 @@
ctai_session_widget::ctai_session_widget()
{
init_layout();
connect_signals();
}
ctai_session_widget::~ctai_session_widget()
{
for (auto* s : m_session_map) {
if (s) {
delete s->session_info;
delete s;
}
}
m_session_map.clear();
}
void ctai_session_widget::init_layout()
{
m_session_layout=new QHBoxLayout();
m_session_table_btn_layout=new QVBoxLayout();
m_session_layout = new QHBoxLayout();
m_session_table_btn_layout = new QVBoxLayout();
splitter = new QSplitter(Qt::Horizontal);
m_table_widget = new QWidget();
m_info_widget = new QWidget();
//会话列表顶部按钮布局
m_session_btn_layout=new QHBoxLayout();
m_btn_new_chat=new QPushButton(tr("新建"));
// 会话列表顶部按钮布局
m_session_btn_layout = new QHBoxLayout();
m_btn_new_chat = new QPushButton(tr("新建"));
m_btn_new_chat->setObjectName("m_new_chat_btn");
m_btn_new_chat->setIcon(QIcon(":/res/img/btn/btn_new_chat.png"));
m_btn_set_chat=new QPushButton(tr("设置"));
m_btn_set_chat = new QPushButton(tr("设置"));
m_btn_set_chat->setObjectName("m_btn_set_chat");
m_btn_set_chat->setIcon(QIcon(":/res/img/btn/btn_setting.png"));
m_btn_del_chat=new QPushButton("删除");
m_btn_del_chat = new QPushButton("删除");
m_btn_del_chat->setObjectName("m_btn_del_chat");
m_btn_del_chat->setIcon(QIcon(tr(":/res/img/btn/btn_delete_chat.png")));
m_session_btn_layout->addWidget(m_btn_new_chat);
m_session_btn_layout->addWidget(m_btn_set_chat);
m_session_btn_layout->addWidget(m_btn_del_chat);
m_session_btn_layout->addWidget(m_btn_del_chat);
m_session_btn_layout->setContentsMargins(0, 0, 0, 0);
//会话列表布局
m_session_table_layout=new QHBoxLayout();
m_session_table=new ctai_session_table();
int row = m_session_table->rowCount();
m_session_table->setItem(row, 0, new QTableWidgetItem("DEMO"));
// 会话列表布局
m_session_table_layout = new QHBoxLayout();
m_session_table = new QTableWidget();
// 初始化设置界面
m_session_setting = new ctai_session_setting();
m_session_setting->hide(); // 初始时隐藏设置界面
is_setting_visible = false;
m_session_table->setColumnCount(1); // 设置列数为1
m_session_table->setSelectionBehavior(QAbstractItemView::SelectRows); // 整行选中
m_session_table->setSelectionMode(QAbstractItemView::SingleSelection); // 单行选择
m_session_table->verticalHeader()->hide(); // 隐藏行号
m_session_table->horizontalHeader()->hide(); // 隐藏表头
m_session_table->horizontalHeader()->setStretchLastSection(true); // 让列自动填充宽度
m_session_table->verticalHeader()->setDefaultSectionSize(40); // 设置默认行高
m_session_table->setStyleSheet("QTableWidget::item { padding: 8px; }"); // 设置内边距
m_session_table->setEditTriggers(QAbstractItemView::DoubleClicked |
QAbstractItemView::EditKeyPressed); // 允许编辑
m_session_table_layout->addWidget(m_session_table);
m_session_table_layout->addWidget(m_session_setting);
m_session_table_layout->setContentsMargins(0, 0, 0, 0);
//会话列表和按钮总布局
// 会话列表和按钮总布局
m_session_table_btn_layout->addLayout(m_session_btn_layout);
m_session_table_btn_layout->addLayout(m_session_table_layout);
m_session_table_btn_layout->setStretch(1, 10);
m_session_table_btn_layout->setContentsMargins(0, 0, 0, 0);
m_table_widget->setLayout(m_session_table_btn_layout);
//会话信息布局
m_session_info_layout=new QHBoxLayout();
m_session_info=new ctai_session_info();
m_session_info_layout->addWidget(m_session_info);
// 会话信息布局
m_session_info_layout = new QHBoxLayout();
m_session_info_layout->addItem(sparcer_item);
m_session_info_layout->setContentsMargins(0, 0, 0, 0);
m_info_widget->setLayout(m_session_info_layout);
//窗口主布局
// 窗口主布局
splitter->addWidget(m_table_widget);
splitter->addWidget(m_info_widget);
splitter->setSizes({200, 600});
@ -59,5 +79,117 @@ void ctai_session_widget::init_layout()
m_session_layout->setContentsMargins(0, 0, 0, 0);
setLayout(m_session_layout);
}
void ctai_session_widget::connect_signals()
{
// 连接信号槽
connect(m_btn_new_chat, SIGNAL(clicked()), this, SLOT(on_new_chat_clicked()));
connect(m_btn_set_chat, SIGNAL(clicked()), this, SLOT(on_set_chat_clicked()));
connect(m_btn_del_chat, SIGNAL(clicked()), this, SLOT(on_del_chat_clicked()));
connect(m_session_table, &QTableWidget::currentCellChanged,
this, [this](int currentRow, int currentCol, int, int) {
on_session_selected(currentRow, currentCol);
});
// 连接表格项目编辑完成信号
connect(m_session_table, &QTableWidget::itemChanged,
this, &ctai_session_widget::on_session_name_changed);
}
void ctai_session_widget::on_new_chat_clicked()
{
// 生成唯一会话ID
QString session_id = QUuid::createUuid().toString(QUuid::WithoutBraces);
// 创建新的session对象
session* new_session = new session();
new_session->session_id = session_id;
new_session->session_name = tr("新会话");
new_session->session_type = "chat";
new_session->session_info = new ctai_session_info();
// 添加到vector中
m_session_map.push_back(new_session);
// 添加到表格中
int row = m_session_table->rowCount();
m_session_table->insertRow(row);
QTableWidgetItem* nameItem = new QTableWidgetItem(new_session->session_name);
m_session_table->setItem(row, 0, nameItem);
// 更新会话信息显示
m_session_info_layout->addWidget(new_session->session_info);
// 选中新创建的行
m_session_table->selectRow(row);
if (m_session_info_layout->count() > 0) {
// 移除弹簧
m_session_info_layout->removeItem(sparcer_item);
}
}
void ctai_session_widget::on_del_chat_clicked()
{
int currentRow = m_session_table->currentRow();
if (currentRow < 0 || currentRow >= m_session_map.size()) {
QMessageBox::warning(this, tr("警告"), tr("请先选择要删除的会话"));
return;
}
// 删除session对象
session* current_session = m_session_map[currentRow];
m_session_map.erase(m_session_map.begin() + currentRow);
delete current_session->session_info;
delete current_session;
// 从表格中删除
m_session_table->removeRow(currentRow);
}
void ctai_session_widget::on_session_selected(int currentRow, int currentColumn)
{
if (currentRow < 0 || currentRow >= m_session_map.size()) return;
// 获取选中的会话
session* current_session = m_session_map[currentRow];
// 清理当前布局
while (QLayoutItem* item = m_session_info_layout->takeAt(0)) {
if (QWidget* widget = item->widget()) {
widget->hide();
}
delete item;
}
// 显示新的会话信息
if (current_session && current_session->session_info) {
m_session_info_layout->addWidget(current_session->session_info);
current_session->session_info->show();
}
}
void ctai_session_widget::on_session_name_changed(QTableWidgetItem* item)
{
if (!item) return;
int row = item->row();
if (row < 0 || row >= m_session_map.size()) return;
// 更新 session 对象中的名称
session* current_session = m_session_map[row];
if (current_session) {
current_session->session_name = item->text();
}
}
void ctai_session_widget::on_set_chat_clicked()
{
is_setting_visible = !is_setting_visible;
if (is_setting_visible) {
m_session_table->hide();
m_session_setting->show();
m_btn_set_chat->setText(tr("返回"));
} else {
m_session_setting->hide();
m_session_table->show();
m_btn_set_chat->setText(tr("设置"));
}
}

View File

@ -7,10 +7,24 @@
#include <QGroupBox>
#include <QPushButton>
#include <QMessageBox>
#include <QTableWidget>
#include <QObject>
#include <QLabel>
#include "ctai_session_table.h"
#include <QMap>
#include <QHeaderView>
#include <QString>
#include <QUuid>
#include "ctai_session_info.h"
#include "ctai_session_setting.h"
typedef struct c_session
{
QString session_id;
QString session_name;
QString session_type;
ctai_session_info* session_info;
}session;
class ctai_session_widget : public QWidget
{
Q_OBJECT
@ -18,6 +32,8 @@ public:
ctai_session_widget();
~ctai_session_widget();
void init_layout();
private:
void on_session_selected(int currentRow, int currentColumn);
private:
//主布局,左右
QHBoxLayout *m_session_layout;
@ -33,10 +49,22 @@ private:
QPushButton *m_btn_del_chat;
//会话列表布局
QHBoxLayout *m_session_table_layout;
ctai_session_table* m_session_table;
QTableWidget* m_session_table;
//会话信息布局
QHBoxLayout *m_session_info_layout;
ctai_session_info *m_session_info;
//会话设置
ctai_session_setting *m_session_setting;
bool is_setting_visible;
// 会话管理mapkey为会话IDvalue为对应的会话信息对象
std::vector<session*> m_session_map;
QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed);
public slots:
void on_new_chat_clicked(); // 新建会话
void on_set_chat_clicked(); // 设置会话
void on_del_chat_clicked(); // 删除会话
void connect_signals();
private slots:
void on_session_name_changed(QTableWidgetItem* item); // 处理会话名称修改
};
#endif

View File

@ -47,68 +47,52 @@ void sui::paintEvent(QPaintEvent *event)
void sui::region(const QPoint &currentGlobalPoint)
{
// 获取窗体在屏幕上的位置区域topLeft为坐上角点rightButton为右下角点
QRect rect = this->rect();
QPoint topLeft = this->mapToGlobal(rect.topLeft());
QPoint bottomRight = this->mapToGlobal(rect.bottomRight());
// 将左上角的(0,0)转化为全局坐标
QPoint topLeft = this->mapToGlobal(rect.topLeft());
QPoint rightButton = this->mapToGlobal(rect.bottomRight());
// 当前鼠标的坐标
int x = currentGlobalPoint.x();
int x = currentGlobalPoint.x();
int y = currentGlobalPoint.y();
if (((topLeft.x() + m_border_width >= x) && (topLeft.x() <= x)) && ((topLeft.y() + m_border_width >= y) && (topLeft.y() <= y)))
{
// 左上角
// 使用更清晰的边界检查
bool inLeftBorder = (x >= topLeft.x() && x <= topLeft.x() + m_border_width);
bool inTopBorder = (y >= topLeft.y() && y <= topLeft.y() + m_border_width);
bool inRightBorder = (x >= bottomRight.x() - m_border_width && x <= bottomRight.x());
bool inBottomBorder = (y >= bottomRight.y() - m_border_width && y <= bottomRight.y());
if (inLeftBorder && inTopBorder) {
ori = LEFTTOP;
// 设置光标形状
this->setCursor(QCursor(Qt::SizeFDiagCursor));
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else if (((x >= rightButton.x() - m_border_width) && (x <= rightButton.x())) && ((y >= rightButton.y() - m_border_width) && (y <= rightButton.y())))
{
// 右下角
else if (inRightBorder && inBottomBorder) {
ori = RIGHTBOTTOM;
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else if (((x <= topLeft.x() + m_border_width) && (x >= topLeft.x())) && ((y >= rightButton.y() - m_border_width) && (y <= rightButton.y())))
{
// 左下角
else if (inLeftBorder && inBottomBorder) {
ori = LEFTBOTTOM;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else if (((x <= rightButton.x()) && (x >= rightButton.x() - m_border_width)) && ((y >= topLeft.y()) && (y <= topLeft.y() + m_border_width)))
{
// 右上角
else if (inRightBorder && inTopBorder) {
ori = RIGHTTOP;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else if ((x <= topLeft.x() + m_border_width) && (x >= topLeft.x()))
{
// 左边
else if (inLeftBorder) {
ori = LEFT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else if ((x <= rightButton.x()) && (x >= rightButton.x() - m_border_width))
{
// 右边
else if (inRightBorder) {
ori = RIGHT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else if ((y >= topLeft.y()) && (y <= topLeft.y() + m_border_width))
{
// 上边
else if (inTopBorder) {
ori = UP;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else if ((y <= rightButton.y()) && (y >= rightButton.y() - m_border_width))
{
// 下边
else if (inBottomBorder) {
ori = DOWN;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else
{
// 默认
else {
ori = NONE;
this->setCursor(QCursor(Qt::ArrowCursor));
}
@ -140,19 +124,27 @@ void sui::mousePressEvent(QMouseEvent *event)
}
void sui::mouseMoveEvent(QMouseEvent *event)
{
// 添加最大化状态判断
if (this->windowState() & Qt::WindowMaximized) {
this->setCursor(QCursor(Qt::ArrowCursor));
return;
}
// 添加鼠标按钮判断
if (!(event->buttons() & Qt::LeftButton)) {
m_press = false;
}
QPoint globalPoint = event->globalPosition().toPoint();
QRect rect = this->rect();
QPoint topLeft = mapToGlobal(rect.topLeft());
QPoint bottomRight = mapToGlobal(rect.bottomRight());
if (this->windowState() != Qt::WindowMaximized)
{
// 没有按下左键时
// 没有按下左键时才检测鼠标位置改变光标形状
if (!m_press)
{
// 窗口大小的改变——判断鼠标位置,改变光标形状
this->region(globalPoint);
}
else
@ -259,7 +251,8 @@ void sui::mouseMoveEvent(QMouseEvent *event)
}
else
{
// 移动窗口
// 移动窗口时保持箭头光标
this->setCursor(QCursor(Qt::ArrowCursor));
move(event->globalPosition().toPoint() - m_point);
event->accept();
}
@ -273,12 +266,8 @@ void sui::mouseReleaseEvent(QMouseEvent *event)
if (event->button() == Qt::LeftButton)
{
m_press = false;
if (ori != NONE)
{
// 释放鼠标抓取
this->releaseMouse();
this->setCursor(QCursor(Qt::ArrowCursor));
ori = NONE;
}
ori = NONE; // 直接重置方向
this->setCursor(QCursor(Qt::ArrowCursor));
this->releaseMouse();
}
}